Problem z walidacją input Scanner

0

Mam taki kod:

Scanner scanner = new Scanner(System.in);
        boolean gameOver = false;
        while (!gameOver) {
            System.out.println("Input :");
            String operation = scanner.next();
            if (operation.equals("start")) {
                String user1 = scanner.next();

                if (user1.equals("user") || user1.equals("easy")) {
                    String user2 = scanner.next();
                    if (user2.equals("user") || user2.equals("easy")) {
                        System.out.println(user1 + " " + user2);
                    } else System.out.println("Bad parameter");
                } else System.out.println("Bad parameter");
            } else if (operation.equals("exit")) {
                gameOver = true;
            } else System.out.println("Bad parameter");
        }

Jak wpisuje start user user jest dobrze .
Jak zrobić żeby po wpisaniu samego start albo start z pierwszym inputem wyświetliło "bad parameter". Jak wpisuje samo start i wciskam enter przechodzi mi do następnej lini i muszę coś wpisać a ja chciałbym żeby po wciśnięciu enter wypisało mi błąd i pętla zaczeła iteracje od początku. Muszę mieć te trzy inputy.
Ktoś może pomóc ?

0

Jak zrobić żeby po wpisaniu samego start albo start z pierwszym inputem wyświetliło "bad parameter". Jak wpisuje samo start i wciskam enter przechodzi mi do następnej lini

Bo oo wpisaniu "start" -> czekasz na kolejny input (scanner.next()).
Nie rozumiem co dokładnie chcesz osiągnąć. Mógłbyś napisać jak ten program ma działać? Czemu start + pierwszy input ma wyświetlać "bad parameter"?

0

Mają być trzy inputy pierwszy może przyjmować start albo exit. jak wpisze start ma przechodzić do drugiego inputa jak exit ma wychodzić z pętli a jak wpiszę cokolwiek innego ma wpisać "Bad parameters!" i zacząć od nowa iterację pętli.
Drugi input ma przyjmować easy lub user i ma przechodzić do następnego inputa a jak wpiszę coś innego ma wypisać "Bad parameters!"
Trzeci input ma przyjmować tak samo jak w drugim easy albo user i ma wypisać te dwa inputy a jak wpiszę coś innego to ma wyświetlić "Bad parameters!".
I właśnie jak wpisuje np start user user wpisuje mi te dwa inputy. Ale jak wpisuje samo start i wciskam enter przechodzi mi do następnej linijki i mam wpisać następny input i dopóki nic nie wpiszę nie chce przejść dalej. A ja chce żeby po enterze wyświetliło mi że błędny parametr i nie wiem jak to zrobić. Myślę że już trochę jaśniej wytłumaczyłem

To ma działać mniej więcej tak tak:
Input command: start
Bad parameters!
Input command: start easy
Bad parameters!
Input command: start easy easy // jest doprze wypisuje
a działa tak
Input command: start
//nowa linijka

i dopóki nic nie wpiszę nie przechodzi dalej

0

Jak przechodzisz w głąb kolejnych if'ów też powinieneś dać pętle. Może coś takiego... tylko w liniach 15 i 20 zamiast return daj break wtedy tylko wyjdzie z tej pęlti się zamiast zamykać porgram.

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean gameOver = false;
        while (!gameOver) {
            System.out.println("Input :");
            String operation = scanner.nextLine();
            if (operation.equals("start")) {  
                String u1 = "";
                while(!u1.equals("exit")) {
                    u1 = scanner.nextLine();
                    if (u1.equals("exit")) return;
                    if (u1.equals("user") || u1.equals("easy")) {
                        String u2 = "";
                        while(!u2.equals("exit")) {
                            u2 = scanner.nextLine();
                            if (u2.equals("exit")) return;
                            System.out.println(1);
                            if (u2.equals("user") || u2.equals("easy")) {
                               System.out.println(2);
                            } else System.out.println("Bad parameter");
                        }
                    } else System.out.println("Bad parameter");
                }
            } else if (operation.equals("exit")) {
                gameOver = true;
            } else System.out.println("Bad parameter");
        }
    }

}
0

Po kilku próbach wychodzi, że powyższe rozwiązanie nie zachowuje się zgodnie z opisem. Zakoduj bezpośrednio to co Napisałęś w drugim swoim poście, tak by to było w pseudokodzie:

prompt = "=> "

while True:
	inp = input("start=> ")
	if inp == "exit":
		print("Bye\n")
		break
	else if inp == "start":
		inp = input(prompt)
		if inp == "easy" or inp == "user":
			inp = input(prompt)
			if inp == "easy" or inp == "user":
				print(inp)
			else:
				print("Bad parameters\n")
				continue
		else:
			print("Bad parameters\n")
			continue
	else:
		print("Bad parameters\n")
		continue

Na początku input jest inny, żeby wyróżnić tą sytuację.

0

Proponowałbym zrobić sprawdzanie za pomocą RegExp

0

A może po prostu tak:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(true){
            String input = scanner.nextLine().toLowerCase().replaceAll("\\s+"," ").trim();
            switch(input){
                case "start user easy":
                case "start easy user":
                    System.out.println("OK");
                    break;
                case "end":
                    System.out.println("Game over");
                    return;
                default:
                    System.out.println("Bad parameters");
            }
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1