18

我希望用户在按下键盘上的任意键后在第一个 while 循环中再次输入信息。我该如何做到这一点?我在 while 循环中做错了什么吗?我应该只有一个while循环吗?

 import java.util.Scanner;

 public class TestMagicSquare
 {
  public static void main(String[] args)
 {    
    boolean run1 =  true;
    boolean run2 = true;

    Square magic = new Square();

    Scanner in = new Scanner(System.in);

    while(run1 = true)
    {
        System.out.print("Enter an integer(x to exit): ");
        if(!in.hasNextInt())
        {
            if(in.next().equals("x"))
            {
                break;
            }

            else
            {
                System.out.println("*** Invalid data entry ***");               
            }                    
        }
        else
        {
            magic.add(in.nextInt());
        }
     }

    while(run2 = true)
    {
        System.out.println();
        if(!magic.isSquare())
        {
            System.out.println("Step 1. Numbers do not make a square");            
            break;
        }
        else
        {
            System.out.println("Step 1. Numbers make a square");
        }

        System.out.println();
        if(!magic.isUnique())
        {
            System.out.println("Step 2. Numbers are not unique");
            break;
        }
        else
        {
            System.out.println("Step 2. Numbers are unique");
        }

        System.out.println();
        magic.create2DArray();
        if(!magic.isMagic())
        {
            System.out.println("Step 3. But it is NOT a magic square!");
            break;
        }
        else
        {
            System.out.println("Step 3. Yes, it is a MAGIC SQUARE!");
        }

        System.out.println();
        System.out.print("Press any key to continue...");// Here I want the simulation
        in.next();
        if(in.next().equals("x"))
        {
            break;
        }
        else
        {
            run1 = true;
        }
      }
    }

   }
4

4 回答 4

24

您可以创建此函数(仅适用于 enter 键)并在代码中的任何位置使用它:

 private void pressAnyKeyToContinue()
 { 
        System.out.println("Press Enter key to continue...");
        try
        {
            System.in.read();
        }  
        catch(Exception e)
        {}  
 }
于 2014-08-02T12:29:11.880 回答
3

1) 见while(run1 = true)while(run2 = true)

= 是java中的赋值运算符。使用 == 运算符比较原语

2)你可以这样做

while(in.hasNext()){

}
于 2013-11-08T23:48:34.753 回答
1

在进入实现细节之前,我认为你需要退后一步重新检查你的算法。根据我收集的信息,您想从用户那里获取整数列表并确定它们是否形成幻方。您可以在单个 while 循环中执行第一步。像这样的伪代码:

while (true)
    print "Enter an integer (x to stop): "
    input = text from stdin
    if input is 'x'
        break
    else if input is not an integer
        print "non integer value entered, aborting..."
        return
    else
        add input to magic object

之后,您可以输出有关数字的详细信息:

if magic is a magic square
    print "this is a magic square"
else
    print "this is not a magic square"

// etc, etc.....
于 2013-11-09T00:15:33.970 回答
1

我的答案仍然只适用于Enter 键,但它不会在输入流上留下以后可能会妨碍的东西(System.in.read() 可能会在下一个输入时读入的流上留下东西)。所以我读了整行(这里我使用 Scanner 但我想这实际上不是必需的,你只需要一些东西来摆脱输入流中的整行):

public void pressEnterKeyToContinue()
{ 
        System.out.println("Press Enter key to continue...");
        Scanner s = new Scanner(System.in);
        s.nextLine();
}
于 2020-03-05T18:33:38.827 回答