简介:
我正在尝试为程序创建一个可控制的循环,并且为此使用了标志。尽管对这个问题来说是多余的,但该程序可以接受任何数字,并说出它是整数还是小数,如果小数显示了小数和浮点数。
在它的底部,我管理while的flag。如果为true,则循环重新启动;如果为false,则结束程序。
问题:如果我输入n或N,它将执行它必须执行的操作。但是,如果我输入s或S。则不会。
我曾经使用过:
我尝试在下一个中不使用那么多的if语句:
bool = !(scan.hasNext("N") || scan.hasNext("n"));
bool = (scan.hasNext("S") || scan.hasNext("s"));
完整代码,如果有人有更好的解决方案或对任何人有帮助:
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int ent = 0;
double dec = 0;
boolean bool = true;
while(bool == true){
System.out.print("Introduce un numero: ");
if (scan.hasNextInt() == true)
{
ent = scan.nextInt();
System.out.println("El numero es entero");
}
else {dec = scan.nextFloat();
System.out.println("El numero es decimal");
//System.out.print();
String realNumber = Double.toString(dec);
String[] mySplit = realNumber.split("\\.");
BigDecimal entero = new BigDecimal(mySplit[0]);
BigDecimal real = new BigDecimal(realNumber);
BigDecimal fraction = real.subtract(entero);
System.out.println(String.format("Entero : %s\nDecimales: %s", entero.toString(),fraction.toString().substring(0,4)));
}
System.out.println("Quieres continuar? S/s o N/n");
bool = !(scan.hasNext("N") || scan.hasNext("n"));
bool = (scan.hasNext("S") || scan.hasNext("s"));
}
}
}
我希望,如果我输入s或S。它将再次询问我一个不是“ java.util.InputMismatchException”的数字
答案 0 :(得分:1)
您正在使用以下形式的hasNext()
:
/**
* Returns true if the next token matches the pattern constructed from the
* specified string. The scanner does not advance past any input.
*
* <p> An invocation of this method of the form <tt>hasNext(pattern)</tt>
* behaves in exactly the same way as the invocation
* <tt>hasNext(Pattern.compile(pattern))</tt>.
*
* @param pattern a string specifying the pattern to scan
* @return true if and only if this scanner has another token matching
* the specified pattern
* @throws IllegalStateException if this scanner is closed
*/
public boolean hasNext(String pattern) {
return hasNext(patternCache.forName(pattern));
}
,用于获取带有特定Pattern
的输入。
您只想获得用户的响应为“ S”或“ N”,因此请使用nextLine()
:
System.out.println("Quieres continuar? S/s o N/n");
boolean gotit = false;
while (!gotit) {
String response = scan.nextLine().toLowerCase().trim();
bool = response.equals("s");
gotit = (response.equals("n") || response.equals("s"));
}