我们再刚开始学习语法,肯定会去找很多题目去练手,那么你也许会遇到这样一个问题:
1.键盘录入一个整数(正数或者负数都可以,但是符号位不算有效的数字位)
2.定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回
3.在main方法中打印该数字是几位数
4.演示格式如下:
(1)演示一:
请输入一个整数:1234
控制台输出:1234是4位数字
(2)演示二:
请输入一个整数:-34567
控制台输出:-34567是5位数字
我们常规的思想可能就是拿这个数字一直除以10,降次一样的思想,设置计数器count = 0;如果该数字除以10!=0,那么继续进行降次循环,并且计数器的值加一。最后,计数器的值就是这个数字的位数。
代码如下:
public static int print(int a) {
int count = 1;
while(a/10!=0) {
a=a/10;
count++;
}
return count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = scanner.nextInt();
int bit;
bit = print(number);
System.out.println("控制台输出:"+number+"是"+bit+"位数字");
}
我在拿到这样的题目的时候,刚开始想到的就是这样的思想,也做出来
结果了。但是同时我也在考虑有没有更好更快的算法可以解决这个问题
。这个时候灵机一动,想到了String,我只要把这个数字转换成字符串,
然后调用字符串的length方法,不就可以获取到这个字符串的长度,不
就是该整数的长度了吗?(这样还是有一个问题,后面会介绍)
那么现在的主要的任务就是将数字转换成字符串了。学习JAVA的人
都会遇到数据类型自动转换的时候吧,我将这个数字加上一个空字符串。
(数字+"")这样数字就自动转换成字符串了。再调用字符串的length
方法就可以拿到长度,也就是位数了。但是这样还有一个很大的问题,
如果我输入的是正整数的时候,这样结果是对的,但是如果我输入的是
一个负整数的话,那么将前面的符号位也变成了字符串中的一个字符,
这样返回的位数就会比实际大于1,这时候我么就得去判断了,如果是负
数的话,我们还要将这个多余的1(符号位产生的)减掉。这样结果就是
正确的了。
代码如下:
public static int getReturn(int num){
if(num>=0){
return (num+"").length();
}
else{
return (num+"").length()-1;
}
}
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int c = getReturn(num);
System.out.println(num+"是一个"+c+"位数");
sc.close();
}
不同的方法可以得到同样的效果(编程之美)
最新推荐文章于 2025-05-22 10:05:02 发布