2014-09-18 2 views
0

У меня есть цикл while, и он не работает. Как вы можете видеть в моем коде, он должен зацикливаться, если переменная «choice» не равна p или n. даже если я делаю выбор равным p или n, это петли хотя бы один раз. У меня плохое размещение или что-то еще?do while loop is looping, когда я не хочу его

do{ 
     System.out.println("Enter the name of the contact you would like to update"); 
     name = sc.nextLine(); 
     System.out.println("Would you like to update their name(press n) or phone" 
       + "number(press p)?"); 
     choice = sc.nextLine(); 
     if(choice.equalsIgnoreCase("n")){ 
      System.out.println("Enter the new name for the contact"); 
      String name1 = sc.nextLine(); 
      SQL.updateName(name, name1); 
      c = SQL.searchByName(name1); 
      if(c != null) 
       System.out.printf("Name: %s\t Phonenumber: %s\n", c.getName(), c.getPhone()); 
      else 
       System.out.println(name+" does not exist"); 
     } 
     else if(choice.equalsIgnoreCase("p")){ 
      System.out.println("Enter the new number for "+name); 
      phone = sc.nextLine(); 
      SQL.updateNumber(name, phone); 
      c = SQL.searchByPhone(phone); 
      if(c != null) 
       System.out.printf("Name: %s\t Phonenumber: %s\n", c.getName(), c.getPhone()); 
      else 
       System.out.println(name+" does not exist"); 
     } 
     } 
     while(choice.equalsIgnoreCase("p") == false || choice.equalsIgnoreCase("n") == false); 

ответ

4

Ваша логика неверна; любой choice всегда будет либо не равен "p", либо не равен "n". Вы хотите зацикливать, только если это не "p"и это не "n". Использовать &&:

while(choice.equalsIgnoreCase("p") == false && choice.equalsIgnoreCase("n") == false); 
+0

Yup, perfect. Благодарю. – Kalkrin

+0

Это правда, но OP использует 'do-while' и жалуется, что он всегда выполняется один раз. Это даже после того, как вы предложили изменить – Lucas

+1

@Lucas 'choice' даже не инициализирован, пока он не окажется внутри цикла do-while. Цикл должен запускаться хотя бы один раз. Жалоба здесь заключается в том, что цикл _ заканчивается_, чтобы зацикливаться, даже если введено '' p "' или '" n "'. – rgettman