gpt4 book ai didi

java - 如何修复此异常不匹配错误?

转载 作者:行者123 更新时间:2023-12-02 10:26:42 26 4
gpt4 key购买 nike

简介:

我正在尝试为程序创建一个可控循环,并且我使用一个标志来完成这样的事情。尽管对问题来说是多余的,但该程序接受任何数字并表示它是整数还是小数,如果小数则显示小数和 float 部分。

在它的底部,我管理 while 的标志。如果为 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”

最佳答案

您正在使用这种形式的 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));
}

用于获取具有特定模式的输入。
您只想获取用户的响应“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"));
}

关于java - 如何修复此异常不匹配错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53897913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com