线程“main”中的exceptionjava.util.IllegalFormatConversionException:d!= java.lang.String

我是Java的新手,我不确定如何修复我在尝试运行此代码时遇到的错误:

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 = 10 && number = 100 && number = 1000 && number = 10000 && number = 100000 && number = 1000000 && number = 10000000 && number = 100000000 && number < 1000000000) { number = 9; } else { System.out.println("Number is greater than 10 billion."); } System.out.printf("%d has ", number + "digits."); } } 

我正在尝试通过检查数字是否>= 10, >= 100等来打印数字的位数…我运行代码并且我能够输入一个int但是一旦我输入它并按下输入所有我得到一个错误,似乎无法看到我做错了什么。 任何人都可以开导我吗?

问题出在这里:

 System.out.printf("%d has ", number + "digits."); 

%d格式说明符需要一个整数作为第二个参数传递给printf ,但是通过连接number"digits." ,你实际上传递了一个String

固定版本:

 System.out.printf("has %d digits ", number); 

请注意,您不能同时打印原始数字和位数,因为您在number变量中用另一个覆盖了一个。 也许使用两个不同的。

将您的上一个printf更改为:

 System.out.printf("number has %d digits ", number); 

尝试将所有字符串附加在一起并使用说明符即

 System.out.printf("blah %d blah ", value). 

像其他人所说,问题出在印刷声明中。 一个更好的方法,而不是使用所有if语句,你应该使用log10方法:

 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; System.out.printf("%d has %d digits\n", number, (int)Math.log10(number) + 1 ); }