在我的计划中,我需要在-
之间的两个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;
}
}
答案 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