2017-01-10 2 views
0

Я делаю проект (на основе учебника). У меня есть оператор switch, и для каждого случая есть значение по умолчанию, если вход пользователя недействителен, и я пишу на консоли «Извините, я не понимаю ваш запрос». Однако, если пользователь вместо того, чтобы писать что-либо, пишет «exit», программа должна закончиться без появления предложения «Я не понимаю запрос».Ввод игнорирует оператор IF, если по умолчанию в коммутаторе

Это указано в моем утверждении IF в начале. То, что мой текущий проект делает в тот момент, когда я набираю «exit», показывает эту строку, а затем останавливается. Я не понимаю, как программа полностью игнорирует этот оператор IF в начале.

public class MainGame { 

public static GameSave gameSave = new GameSave(); 
public static String user = ""; 
public static Scanner scanner = new Scanner(System.in); 
public static String question; 
public static int relationshipPoints; 

public static void main(String[] args) { 
     Random random = new Random(); 
     question = gameSave.loadGame(); 
     // relationshipPoints = gameSave.loadPoints(); 
     RelationshipPoints points = new RelationshipPoints(); 

     System.out.println("\n\t*** TEXT_GAME: FIRSTDATE ***\n"); 
     System.out.println("-You can exit the game at any time by typing 'exit'.-\n\n"); 

     while (true) { 

      if (user.equalsIgnoreCase("exit")) { 
       System.exit(1); 
       break; 
      } else { 
       switch (question) { 
       [...] 
       case "2": 
        switch (user = scanner.next()) { 
        case "1": 
         System.out.println("\n\nThe guy you met last night was nice. You want to " 
           + "get back into contact with him. Why don't you check your phone for a number?"); 
         question = "2A"; 
         gameSave.saveGame("2A"); 
         break; 
        case "2": 
         System.out.println("\n\n"); 
         question = "0"; 
         break; 
        default: 
         System.out.println("\nI do not understand your request.\n"); 
         question = "2"; 
         break; 
        } 
        break; 
       case "2A": [...] 
+2

Пожалуйста, улучшите этот код до [mcve] (http://stackoverflow.com/help/mcve) –

+0

Попробуйте: user.trim(). EqualsIgnoreCase («exit»); 'может быть, что символ новой строки это то, что не удалось сравнивать – alfasin

+0

@TimothyTruckle жаль, что я не знаю, как это сделать, код огромен, я не могу скопировать все это! –

ответ

0

user = scanner.nextLine(); вставить эту строку только после ввода в while loop. ваша проблема возникает, когда вы проверяете user, равную exit, но user ничего не имеет, поэтому контроль идет до else.

+0

жаль, что он не работает. Если я поставлю user = scanner.nextLine(); над циклом while программа сначала ждет, пока я не наберу что-то, я делаю, тогда программа начнется как обычно, и если в любой момент я наберу «exit», она покажет строку «Я не понимаю ваш запрос» до окончания. Строка всегда появляется. :/ –

+0

@Evan извините, просто положите эту строку ниже 'while loop'. –

+0

Спасибо @jack jay Это работает! Теперь программа заканчивается, не показывая эту строку. Однако теперь моя игра перепуталась, мне нужно ввести все два раза для того, чтобы программа перешла к следующему вопросу Oo –

1

Попробуйте заменить while(true) {...} с while ((user = scanner.next() != null) { ... }

Похоже, что вы пытаетесь получить доступ к данным «пользователь» без предварительной установки его.

+0

Я пытаюсь найти способ написать это, но есть ошибка «невозможно преобразовать из String в boolean». –

Смежные вопросы