1

このメソッドにさらに数字があるかどうかを尋ねられた後に「y」と入力すると、コードが正しく機能してループを抜けるのに、「n」と入力してリターンを押すと、「n」と入力してもう一度リターンを押すか、プロセスがハングします。

なんで?

文字列 'input' は、メイン メソッドでユーザーの入力から渡されており、この場合は「加算」です。

private int add(String input)
    {
        int additionValue = 0;
        boolean keepGoing = true;
        if (input.matches("addition"))
        {

            while (keepGoing == true)
            {
                System.out.println("Next digit = (Type the digit)");
                additionValue = additionValue + scan.nextInt();
                System.out.println("Any more digits? Type y/n");
                if (scan.next().matches("Y|y"))
                {
                    keepGoing = true;
                }
                else if (scan.next().matches("N|n"))
                {
                    keepGoing = false;
                }
                else
                {
                    System.out.println("Great, you broke it.");
                    System.exit(1);
                }
            }
        }
    }

を使用してコードを機能させることができました

System.out.println("Any more digits? Type y/n"); 
String yayOrNay = scan.next();
if (yayOrNay.length()==1 && yayOrNay.charAt(0)=='y')
                {
                    keepGoing = true;
                }

しかし、それは私には少し複雑すぎるようです。

4

6 に答える 6

4

scan.next()入力ストリームから新しい文字を引き出します。

したがって、「n」をチェックしてscan.next().matches("Y|y")実行すると、実際には次の比較のために「n」がスキップされます。

scan.next()解決策は、使用できる変数に割り当てることです。

        while (keepGoing == true)
        {
            System.out.println("Next digit = (Type the digit)");
            additionValue = additionValue + scan.nextInt();
            System.out.println("Any more digits? Type y/n");
            String next = scan.next();
            if (next.matches("Y|y"))
            {
                keepGoing = true;
            }
            else if (next.matches("N|n"))
            {
                keepGoing = false;
            }
            else
            {
                System.out.println("Great, you broke it.");
                System.exit(1);
            }
        }
于 2013-10-17T17:28:17.803 に答える
0
                if (scan.next().matches("Y|y"))
            {
                keepGoing = true;
            }
            else if (scan.next().matches("N|n"))

scan.nextを 2 回呼び出します

初めてYかどうかを確認し、そうでない場合は入力から再度読み取ります

それで

        somevar=scan.next()
        if (somevar.matches("Y|y"))
        {
            keepGoing = true;
        }
        else if (somevar.matches("N|n"))
        {
            keepGoing = false;
        }
        else ..
于 2013-10-17T17:29:05.930 に答える
0

エラーは、scan.next() を 2 回呼び出して、2 つの入力を要求することです。

private int add(String input)
{
    int additionValue = 0;
    boolean keepGoing = true;
    if (input.matches("addition"))
    {

        while (keepGoing == true)
        {
            System.out.println("Next digit = (Type the digit)");
            additionValue = additionValue + scan.nextInt();
            System.out.println("Any more digits? Type y/n");
            String s = scan.next();
            if (s.matches("Y|y"))
            {
                keepGoing = true;
            }
            else if (s.matches("N|n"))
            {
                keepGoing = false;
            }
            else
            {
                System.out.println("Great, you broke it.");
                System.exit(1);
            }
        }
    }
}
于 2013-10-17T17:29:15.780 に答える