2014-09-27 2 views
0
Scanner sc = new Scanner (System.in); 
String enter = new String ("Enter your name brave soul: "); 
System.out.println (enter); 
String name = sc.next(); 
System.out.println ("Your name is: " + name + "? Y/N"); 
boolean y = true; 
boolean n = false; 
String yesorno = sc.next(); 

String intro1 = new String ("Welcome to Urieka! The objective of this game is quite simple, just find the key to escape."); 


if (true) {System.out.println (intro1);} //here 
else if (false) {System.out.println (enter);} //here 

У меня проблема, я хочу, чтобы напечатать intro1 если пользователь вводит у, и я хочу, чтобы приглашение ввести имя, если они вводят его неправильно. Его в настоящее время ТОЛЬКО печать intro1 независимо от того, вводя y или нет.У меня возникли проблемы с булевыми по-видимому, textbased играми

Кроме того, есть ли способ запустить этот сканер еще раз, потому что я предполагаю, что если я получу эту работу, а пользователь вводит n/false, тогда он просто напечатает «Введите свое имя храброго душа» и ничего больше , Должен ли я каким-то образом добавить сканер в оператор на строке else if?

ответ

3
if (true) {System.out.println (intro1);} //here 

это всегда верно и всегда будет работать. Остальное будет также никогда бежать.

Вы хотите вместо

if ("y".equalsIgnoreCase(yesorno)) { 
    //... 
} 
+0

Oh..I был под впечатлением, что верно только справедливо, если я так сказал. Вот почему я установил для них значения, мне кажется, что я думаю, что теперь я плохо сделаю редактирование. – METEORITES

3

Ну ... true всегда верно, так

if (true) { ... } 

всегда будет выполняться. Вы должны сделать что-то вроде:

System.out.println("y".equalsIgnoreCase(yesorno) ? intro1 : enter); 
+0

Я не думаю, что парень поймет ваш код: p – Alboz

+0

У всех есть начало! Если бы я был новичком, мне было бы интересно узнать этот синтаксис, который позволит сделать это в одной строке, и я бы кое-что узнал. – Dici

+0

Я понимаю. Таким образом, это означает, что если бы я избавился от ввода сканера по Yesorno переменной последующий оператор if не должен работать? Однако это приводит к моему следующему вопросу, нужно ли мне повторно вводить функцию сканера, если пользователь вводит n? – METEORITES

0

Если (истина) означает, что он всегда будет ввести, если условие и оно всегда будет печатать intro01, как это делает. Условие else никогда не будет достигнуто.

ваше состояние должно быть что-то вроде:

if("y".equalsIgnoreCase(yesorno)) 
    System.out.println (intro1); 
else 
    System.out.println (enter); 
2

Вы никогда не изменить эти булевы:

boolean y = true; 
boolean n = false; 

Также старайтесь избегать использования если (правда), как уже упоминалось в предыдущем посте:

Не обязательно использовать конструктор при создании экземпляра объекта String:

String enter = new String("Enter your name brave soul: "); 
// IS THE SAME AS <=> 
String enter = "Enter your name brave soul: "; 

Вот мое решение вашей проблемы:

Scanner scanner = new Scanner(System.in); 
    boolean correctName = false; 
    String name = ""; 

    while(!correctName){ //== Will run as long "correctName" is false. 
     System.out.println("Enter your name brave soul: "); 
     name = scanner.next(); 
     System.out.println("Your name is: " + name + "? Y/N"); 
     String yesorno = scanner.next(); 
     correctName = "Y".equalsIgnoreCase(yesorno); //== changes the boolean depending on the answer 
    } 
    System.out.println("Welcome to Urieka" + name + "! The objective of this game is quite simple, just find the key to escape."); 
+0

Это отлично, он сделал все, что я хотел. Кажется, что я пытаюсь сохранить введение в виде строковых переменных, вызвавших больше проблем, чем решений – METEORITES