Scanner.nextInt给出InputMismatchException:对于输入字符串:" 222234411110000"

时间:2015-05-25 01:16:51

标签: java

在我的计划中,我需要在-之间的两个odd numbers*之间插入even numbers,如果有0则忽略。例如:

Input = 99946   Output = 9-9-94*6
Input = 56647304    Output = 56*6*47-304

方法getDigits()将输入的number的数字放入数组单元格中。方法insertDashesAsteriks()正确连接String

但是当我使用以下示例运行我的程序时:

  

请输入数字以便重新排列:
  222234411110000

Exception in thread "main" java.util.InputMismatchException: For input string: "222234411110000"
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at DashInsert2.main(DashInsert2.java:9)

然后我得到了InputMismatchException。为什么我收到错误?

import java.util.Scanner;

public class DashInsert2 {

    public static void main(String[] args)
    {
        Scanner kbd = new Scanner(System.in);
        System.out.println("Please enter the numbers so they could be rearranged: ");
        int nums = kbd.nextInt();

        int[] numArray = getDigits(nums);
        System.out.println("The array representation of the numbers is \n");
        System.out.println();

        String result = insertDashesAsteriks(numArray);
        System.out.println("The result is " + result);

    }

    public static int[] getDigits(int numbers)
    {
        int length = Integer.toString(numbers).length();
        int[] temp = new int[length];

        for(int i = 0; i < length; i++)
        {
            temp[i] = numbers % 10;
            numbers = numbers / 10;
        }

        return temp;
    }

    public static String insertDashesAsteriks(int[] numArray)
    {
        String temp = "";
        for(int i = 1; i < numArray.length; i++)
        {
            if(numArray[i] % 2 == 0 && numArray[i-1] % 2 ==0)
            {
                temp = numArray[i-1] + "*" + numArray[i] + "*";
            }
            else if(numArray[i] == 0 || numArray[i-1] == 0)
            {
                temp = numArray[i-1] + "" + numArray[i] + "";
            }
            else if(numArray[i] % 2 != 0 && numArray[i-1] % 2 != 0)
            {
                temp = numArray[i-1] + "-" + numArray[i] + "-";
            }
        }

        return temp; 
    }
}

3 个答案:

答案 0 :(得分:5)

<g:render template="displaybook" model="['book':book,'author':author]" collection="${books}" />的最大值 2,147,483,647

您输入了: 222,234,411,110,000

答案 1 :(得分:2)

您需要将数字视为字符串,因为您输入的数字超过了最大可能的32位整数。

尝试kbd.next().charAt(0);逐个字符地解析它。

答案 2 :(得分:1)

首先,如果你正在"$id"阅读,那么你的范围是有限的。这意味着超过大约+/- 20亿的数字是不可能的。要处理更大的数字,您可以移动到更大的数据类型(如int)或只处理字符串,这些字符串的限制要严格得多。

一旦 处理字符串,使用正则表达式进行替换就会有一种更简单的方法(就你必须编写的代码而言):

long

public class Test { static String morph(String s) { String oldS; do { oldS = s; s = s.replaceAll("([13579])([13579])", "$1-$2"); s = s.replaceAll("([2468])([2468])", "$1*$2"); } while (! s.equals(oldS)); return s; } public static void main(String args[]){ System.out.println(morph("99946")); System.out.println(morph("56647304")); System.out.println(morph("222234411110000")); } } 函数只是用你的替换规则修改字符串,直到它不再改变。测试工具的输出(使用您提供的数据)是:

morph

现在可能是,如果这是一项课堂作业,你可以使用的语言设施有限。但是,既然你没有提到这一点,并且没有正确思维的编码器会(通常)选择更多难度路径,那么你应该考虑使用正则表达式方法。更短的代码几乎总是不容易出错。

如果想要使用正则表达式,您仍然可以使代码相对简短且结构合理,例如:

9-9-94*6
56*6*47-304
2*2*2*234*41-1-1-10000