线程" main"中的例外情况java.util.IllegalFormatConversionException:d!= java.lang.String

时间:2014-10-18 15:09:53

标签: 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 = 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.");
    }
}

我试图通过检查该号码是>= 10, >= 100等来打印该号码的位数...等等... 我运行代码并且我能够输入一个int但是一旦我输入它并按回车所有我得到它一个错误,并且似乎看不出我做错了什么。任何人都可以开导我吗?

3 个答案:

答案 0 :(得分:2)

问题在于:

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

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

修正版:

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

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

答案 1 :(得分:0)

将您的上一次printf更改为:

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

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

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

答案 2 :(得分:0)

正如其他人所说,问题出在印刷声明中。一个更好的方法,而不是使用所有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 );
}