关于数组异常

时间:2011-09-14 09:32:23

标签: java

当我运行下面的代码时,为什么会抛出此错误?

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextInt(Scanner.java:2091)
    at java.util.Scanner.nextInt(Scanner.java:2050)
    at GuessNumber.main(GuessNumber.java:35)

这是我的代码,谢谢:

public class GuessNumber {
    public static void main(String[] args) {
        int[][] num = new int[5][16];
        int[] len = new int[5];
        char[] bit;
        for (int i = 1; i <= 32; i++) {
            bit = ToBinary(i);
            //bit的大小为5:把二进制数存储到数组中num
            for (int j = 0; j < bit.length; j++) {
                if (bit[j] == '1') {
                    //11000
                    num[j][len[j]++] = i;
                }
            }
        }

        Random r = new Random((new Date()).getTime());
        int numRoad = r.nextInt(31);
        bit = ToBinary(numRoad);
        String cardRand = "";
        for (int i = 0; i < bit.length; i++) {
            if (bit[i] == '1') {
                cardRand = cardRand + (i + 1) + ",";
            }
        }
        System.out.println("在卡片" + cardRand + "上的数字是:");
        System.out.println("请玩家输入猜测数字:");
        Scanner c = new Scanner(System.in);
        int number = c.nextInt();
        if (number == numRoad) {
            System.out.println("恭喜您,猜对了.");
        } else {
            System.out.println("对不起!猜错了,该数应该为:" + numRoad);
        }

    }

    /**
     * 将十进制数转成二进制数
     * 
     * @param i
     * @return
     */
    public static char[] ToBinary(int c) {

        char[] bit = new char[5];
        String a = Integer.toBinaryString(c);
        bit = a.toCharArray();
        char temp;
        for (int i = 0; i < bit.length / 2; i++) {
            temp = bit[i];
            bit[i] = bit[bit.length - 1 - i];
            bit[bit.length - 1 - i] = bit[i];
        }
        return bit;
    }
}

2 个答案:

答案 0 :(得分:1)

Javadoc救援:

  

抛出:       InputMismatchException - 如果下一个标记与   整数正则表达式,或超出范围

您可能没有输入程序要求的有效整数。

答案 1 :(得分:1)

最有可能的原因是Scanner需要一个整数值并找到其他东西。例外情况是您在控制台上实际输入的结果。


看起来你看到一个二进制数(10011)并且必须输入十进制值(19