-2

整数入力を取り、入力に基づいていくつかの文字を出力し、プログラムを再度実行するように求めるプログラムがあります。例えば

Please enter an integer --> 3

x

xx

xxx

xx

x

Do you want to run again?

これは私のプログラムのコードです:

import java.util.*;
public class CMIS242Assignment1Stars 
{
    public static void main(String[] args) 
    {
        String again;

       do //start of "run again" loop
        {
            System.out.print("Input a positive integer and press [ENTER]--> ");
            Scanner input = new Scanner(System.in);

            if (input.hasNextInt()) // check if input is parsable to an int
            {        
                int num = Integer.parseInt(input.next());

                if (num <= 0) //check if num is positive
                {
                    System.out.println(num + " is not a positive integer. Using +" + (num*-1) + " instead.");
                    num = num *= -1;
                }    
                String stars = new String(new char[num]).replace("\0", "*"); // create a string of '*' of length 'num'
                int forNum = num * 2;
                int flip = 0;

                for (int x = 0; x <= forNum ; x++)
                {
                    System.out.println(stars.substring(0,stars.length() - num)); //create substrings of variable length from 'stars'

                    if(num <= 0)
                    {
                        flip = 1;
                    }

                    if(flip == 0)
                    {
                        num--;
                    }
                    else
                    {
                        num++;
                    }
                }
            }           
            else 
            {
                System.out.println("ERROR: Please input a positive integer!");//error message if a non-integer is entered
            }

            System.out.print("Would you like to run again? [Yes / No] ");
            again = input.next();     
        }
        while(again.equalsIgnoreCase("yes") || again.equalsIgnoreCase("y")); // end of "run again" loop

        System.out.print("Good Bye!"); //exit message        
    }
}

問題は、正しい入力を保証するコードにあると思います。int または負の int が入力された場合、プログラムは完全に機能しますが、非 int が入力として入力された場合、プログラムは「再実行」プロンプトを待ちません。どうすればこれを修正できますか?

4

1 に答える 1

1

ロジックを少し修正する必要があります。

最も簡単な解決策は、else ステートメントを修正することです。

else 
{
  //Move scanner position.
  String badInput = input.next();
  System.out.println("ERROR: Please input a positive integer!");//error message if a non-integer is entered
}

input.hasNextInt()コンソールに整数ではないものがあるかどうかを確認しますが、そうではありません。を使用する場合、hasNextInt()メソッドは実際にスキャナーの位置を移動しませんhasNextInt()。この問題を解決するためinput.next()に、else ステートメントで a を使用します。

于 2013-03-22T10:48:51.253 に答える