我想做一个循环,重复输入请求,直到用户最终满足数字输入而不是字符串的条件为止。顺便说一下,我在这里使用BufferedReader。有没有办法在BigInteger和BufferedReader中重复它?
mainLoop: while(true) {
System.out.println("Choose a number:");
System.out.println("1 - Addition");
System.out.println("2 - Subtraction");
System.out.println("3 - Multiplication");
System.out.println("4 - Division");
System.out.println("5 - QUIT");
try {
int choice = Integer.parseInt(myObj.readLine());
BigInteger Num1, Num2, sum, diff, qoutient, product;
String num1 = null, num2 = null;
switch (choice) {
case 1:
try {
num1 = myObj.readLine();
Num1 = new BigInteger(num1);
num2 = myObj.readLine();
Num2 = new BigInteger(num2);
sum = Num1.add(Num2);
System.out.println("The answer is "+sum);
} catch (NumberFormatException e){
}break;
输出实际上返回主循环。
答案 0 :(得分:0)
更新:
实际上我找到了答案。我做了一会儿循环。
subLoop: while (true) {
try {
System.out.println("Enter 2 numbers");
num1 = myObj.readLine();
Num1 = new BigInteger(num1);
num2 = myObj.readLine();
Num2 = new BigInteger(num2);
sum = Num1.add(Num2);
System.out.println("The answer is "+sum+ "\n");
} catch (NumberFormatException e){
System.out.println("Use numbers only.");
continue subLoop;
}
break;
}
continue mainLoop;
答案 1 :(得分:0)
AxelH的建议是保持代码的可读性和可追溯性,就像您要说的那样,对于您的主循环,
boolean keepGoing = true;
while (keepGoing){
//main loop stuff here, and in the case where 5 is chosen, set keepGoing = false
}
请注意,不需要标签。如果您的readLine失败(或者表明您在输入的末尾),则可能还需要将keepGoing设置为false。
我建议您引入两个简单的函数来查看给定的字符串是否为整数:
public boolean isInteger( String input ) {
try {
Integer.parseInt( input );
return true;
}
catch( NumberFormatException e ) {
return false;
}
}
和
public boolean isBigInteger( String input ) {
try {
BigInteger t = new BigInteger( input );
return true;
}
catch( NumberFormatException e ) {
return false;
}
}
我对输入的工作原理还不太熟悉,因此我不知道是否要循环,直到您有一个不错的选择,然后再担心输入数字。 如果是这样,获得良好的选择循环就像
boolean needAGoodChoice = true;
int choice = 0;
while (needAGoodChoice){
String numChoice = myObj.ReadLine();
if (isInteger(numChoice)){
choice = Integer.parseInt(numChoice);
//could add check here the number is between 1 and 5 inclusive
needAGoodChoice=false;
}
else{
System.out.println("Use numbers only for choice.");
}
}
当结束时,选择就是选择的编号。
相同的逻辑将适用于通过num1和num2字符串将值获取到Num1和Num2 BigIntegers中。
boolean needNums = true;
while (needNums){
System.out.println("Enter 2 numbers");
num1 = myObj.ReadLine();
num2 = myObj.ReadLine();
if (isBigInteger(num1) and isBigInteger(num2)){
Num1 = new BigInteger(num1);
Num2 = new BigInteger(num2);
needNums=false;
}
else{
System.out.println("Use numbers only for operations.");
}
}
由于您所有的操作都是二进制操作,所以我想让数字循环进入switch语句之外(在一个用于检查choice> = 1和choice <= 4的if块内),以避免重复4次。 / p>
从本质上讲,它与您的解决方案并没有太大区别,而且看起来很冗长,但是从长远来看,我认为它会更易于维护和遵循。