线程“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 ); }