Hoe zorg ik ervoor dat Druk op een willekeurige toets om door te gaan in mijn Java-code werkt?

Ik wil dat de gebruiker opnieuw informatie invoert in de eerste while-lus nadat hij op een willekeurige toets op het toetsenbord heeft gedrukt. Hoe bereik ik dat?
Doe ik iets verkeerd met de while-loops? Moet ik er maar één hebben terwijl lus?

 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;
        }
      }
    }
   }

Antwoord 1, autoriteit 100%

U kunt deze functie maken (alleen geschikt voor enter-toets) en deze gebruiken waar u maar wilt in uw code:

 private void pressAnyKeyToContinue()
 { 
        System.out.println("Press Enter key to continue...");
        try
        {
            System.in.read();
        }  
        catch(Exception e)
        {}  
 }

Antwoord 2, autoriteit 15%

1) Zie while(run1 = true) en while(run2 = true)

= is een toewijzingsoperator in Java. gebruik == operator om primitieven te vergelijken

2) Je kunt het zo doen

while(in.hasNext()){
}

Antwoord 3, autoriteit 5%

Voordat u ingaat op implementatiedetails, denk ik dat u een stap terug moet doen en uw algoritme een beetje opnieuw moet onderzoeken. Van wat ik heb begrepen, wil je een lijst met gehele getallen van de gebruiker krijgen en bepalen of ze een magisch vierkant vormen. U kunt de eerste stap in een enkele while-lus doen. Zoiets als deze pseudo-code:

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

Daarna kunt u details over de cijfers weergeven:

if magic is a magic square
    print "this is a magic square"
else
    print "this is not a magic square"
// etc, etc.....

Antwoord 4

Mijn antwoord werkt nog steeds alleen met de Enter-toets, maar het doet dit zonder dingen in de invoerstroom achter te laten die later in de weg kunnen staan ​​(System.in.read() kan mogelijk dingen aan laten staan de stream die wordt ingelezen bij de volgende invoer). Dus ik las de hele regel (hier gebruik ik Scanner, maar ik denk dat dat niet echt nodig is, je hebt alleen iets nodig om de hele regel in de invoerstroom te verwijderen):

public void pressEnterKeyToContinue()
{ 
        System.out.println("Press Enter key to continue...");
        Scanner s = new Scanner(System.in);
        s.nextLine();
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes