“线程中的异常”;“主要”;java.util.IllegalFormatConversionException:d!=java.lang.String

“线程中的异常”;“主要”;java.util.IllegalFormatConversionException:d!=java.lang.String,java,Java,我是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 = i

我是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 < 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.");
    }
}
import java.util.Scanner;
公共类P3_3
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(系统输入);
System.out.print(“请输入一个数字:”);
int number=in.nextInt();
如果(数字<0)数字*=-1;
如果(编号>=10&&number<100)
{
数量=2;
}
否则,如果(编号>=100&&number<1000)
{
数字=3;
}
否则,如果(编号>=1000&&number<10000)
{
数字=4;
}
否则如果(数量>=10000&&number<100000)
{
数字=5;
}
否则如果(数量>=100000&&number<1000000)
{
数字=6;
}
否则如果(编号>=1000000&&number<10000000)
{
数字=7;
}
否则如果(编号>=10000000&&number<100000000)
{
数字=8;
}
否则如果(编号>=100000000&&number<100000000)
{
数字=9;
}
其他的
{
System.out.println(“数字大于100亿”);
}
System.out.printf(“%d有”,数字+”数字“);
}
}
我试图通过检查数字是否为
=10、>=100等来打印数字的位数。。。

我运行代码,我能够输入一个int,但一旦我输入它并按enter all,我就会得到一个错误,似乎看不出我做错了什么。谁能启发我

将上次打印更改为:

System.out.printf("number has %d digits ", number);
尝试将所有字符串附加在一起,并使用说明符,即

System.out.printf("blah %d blah ", value).
问题在于:

System.out.printf("%d has ", number + "digits.");
%d
格式说明符要求将整数作为第二个参数传递给
printf
,但通过将
数字
数字串联起来。
实际上传递了一个
字符串

固定版本:

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

请注意,您不能同时打印原始数字和位数,因为您在
number
变量中一个数字与另一个数字一起重写。可能使用两种不同的方法。

正如其他人所说,问题在于打印声明。更好的方法是,不使用所有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 );
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
System.out.print(“请输入一个数字:”);
int number=in.nextInt();
如果(数字<0)数字*=-1;
System.out.printf(“%d有%d个数字\n”,数字,(int)Math.log10(数字)+1);
}