I'm new to Java and I'm not sure how to fix the error I'm getting when trying to run this code:
import java.util.Scanner;
public class P3_3
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Please enter a number: ");
int number = in.nextInt();
if (number < 0) number *= -1;
if (number >= 10 && number < 100)
{
number = 2;
}
else if (number >= 100 && number < 1000)
{
number = 3;
}
else if (number >= 1000 && number < 10000)
{
number = 4;
}
else if (number >= 10000 && number < 100000)
{
number = 5;
}
else if (number >= 100000 && number < 1000000)
{
number = 6;
}
else if (number >= 1000000 && number < 10000000)
{
number = 7;
}
else if (number >= 10000000 && number < 100000000)
{
number = 8;
}
else if (number >= 100000000 && number < 1000000000)
{
number = 9;
}
else
{
System.out.println("Number is greater than 10 billion.");
}
System.out.printf("%d has ", number + "digits.");
}
}
I'm trying to print how many digits the number has, by checking whether the number is >= 10, >= 100 and so on...
I run the code and I'm able to input an int but once I input it and press enter all I get it an error and can't seem to see what I have done wrong. Can anyone enlighten me?
解决方案
The problem is here:
System.out.printf("%d has ", number + "digits.");
the %d format specifier requires an integer to be passed as second parameter to printf, but by concatenating number and "digits.", you actually passed a String.
Fixed version:
System.out.printf("has %d digits ", number);
note that you cannot print both the original number and the number of digits, because you overwrote one with the other in the number variable. Maybe use two different ones.