2014-01-19 6 views
0

Каждый раз, когда я ввожу выбор из списка опций, он просто говорит мне снова вводить выбор, он должен делать это только тогда, когда пользователь вводит что-то, что не является вариантом.В то время как проблемы с циклом?

У меня возникла такая же проблема с циклом while для параметров «да» и «нет», но после исправления я не вижу различий между этим и областью, где у меня все еще есть проблема, кроме дополнительных параметров.

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package testing.tests; 

import java.util.Scanner; 

/** 
* 
* @author andyoppenheimer 
*/ 
public class TestingTests { 

    static Scanner sc = new Scanner(System.in); 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here  

     String start_end; 
     String test_run = null; 
     int name_num = 0; 
     int LOOP_1 = 0; 
     int LOOP_2 = 0; 

     while (LOOP_1 == 0) { 
      System.out.println("Do you want to continue, yes or no?"); 
      System.out.print("----->: "); 
      start_end = sc.next(); 
      if ("yes".equals(start_end)) { 
       LOOP_1 = 1; 
      } 
      if ("no".equals(start_end)) { 
       LOOP_1 = 1; 
       System.exit(0); 
      } 
      if (!"no".equals(start_end) & !"yes".equals(start_end)) { 
       LOOP_1 = 0; 
      } 
     } 

**

while (LOOP_2 == 0) { 
      System.out.println("Please pick your test to run."); 
      System.out.println("population"); 
      System.out.println("income"); 
      System.out.println("password"); 
      System.out.println("randomize"); 
      System.out.print("----->: "); 
      test_run = sc.next(); 
      if (!"population".equals(test_run) && !"income".equals(test_run) && !"password".equals(test_run) && !"randomize".equals(test_run)) { 
       LOOP_2 = 0; 
      } 
      if ("population".equals(test_run) & "income".equals(test_run) & "password".equals(test_run) & "randomize".equals(test_run)) { 
       LOOP_2 = 1; 
      } 

**

 } 

     if ("population".equals(test_run)) { 
     } 

     if ("income".equals(test_run)) { 
     } 

     if ("password".equals(test_run)) { 
     } 

     if ("randomize".equals(test_run)) { 
      System.out.println("Enter the number of names that will be randomized."); 
      System.out.print("----->: "); 
      name_num = sc.nextInt(); 
     } 

    } 
} 
+1

Теперь самое время научиться правильно использовать «отладчик». Запустите некоторые точки останова в разных точках ваших «циклов» и проверьте, какая переменная вызывает проблемы. – Tdorno

+0

Да, отладчик. Поместите некоторые точки останова, и если вы используете == для сравнения строк, замените его на equals(). (Но я не нашел никаких символов со строками в то время, когда этот комментарий был wroten) – alesc3

ответ

0

Это заявление:

if ("population".equals(test_run) & "income".equals(test_run) & 
"password".equals(test_run) & "randomize".equals(test_run)) { 
      LOOP_2 = 1; 
     } 

никогда не будет выполняться. Вы должны использовать оператор или оператор ||, а не &. Поскольку код в настоящее время стоит, для этого условия для оценки истины test_run должно быть равно всем выборам, что невозможно.

4

Изменение этой линии

if ("population".equals(test_run) & "income".equals(test_run) & "password".equals(test_run)& "randomize".equals(test_run)) { 
     LOOP_2 = 1; 
    } 

в

if ("population".equals(test_run) || "income".equals(test_run) || "password".equals(test_run) 
      || "randomize".equals(test_run)) { 
    LOOP_2 = 1; 
} 

|| является логическим оператором ИЛИ, это то, что вы должны использовать.

& оценивает обе стороны операции, так что ваш if будет оценивать test_run равным "population", "income", "password" и "randomize", что невозможно.

Edit:

С первого if это ничего не меняется (LOOP_2 сохранит свое значение 0), я бы ommit что весь if, другими словами, удалить первый if

// Delete this 
if (!"population".equals(test_run) && !"income".equals(test_run) && !"password".equals(test_run) && !"randomize".equals(test_run)) { 
    LOOP_2 = 0; 
} 
+1

Кроме того, учитывая, что этот оператор проверяет точную противоположность предыдущей инструкции if, все, что вам нужно использовать, это «else». – JaTochNietDan

+1

@JaTochNietDan да, вы правы, но было бы лучше удалить первый оператор 'if', поскольку он ничего не меняет. – Christian

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