如何解决此异常不匹配错误?

时间:2018-12-22 17:33:38

标签: java

简介:

我正在尝试为程序创建一个可控制的循环,并且为此使用了标志。尽管对这个问题来说是多余的,但该程序可以接受任何数字,并说出它是整数还是小数,如果小数显示了小数和浮点数。

在它的底部,我管理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”的数字

1 个答案:

答案 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"));
    }