2016-01-20 2 views
1

В настоящее время я делаю некоторые экскременты java в uni и ive, которые застряли на этом около 5 часов! Я тренируюсь для циклов и задаю цикл 5 раз для числа от 1 до 3. При тестировании, если я введу неверный выбор, он включает и включает недопустимый выбор в качестве нуля, у меня есть сообщение об ошибке, работающее, когда введен неверный ввод, но он все еще продолжается до тех пор, пока цикл не завершится, я знаю, что есть способ вернуться к началу выбора, но я не могу это понять. Я искал везде решение, но не могу его найти! Я знаю, что это не может быть много, и я не вернусь в uni в течение нескольких дней, поэтому я не могу спросить лектора, и я действительно хотел бы перейти к следующей главе.Java For Loop data validation

Вот мой код (я знаю его, вероятно, немного лоскутной !!), спасибо, Роб

import java.util.Scanner; 

/* this is s a survey of how 5 people sweeten thier coffee */ 

class coffee 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 

     int person, preference, nothing, sugar, sweetner; 

     String pluralone = "People dont"; 
     String pluraltwo = "People use"; 
     String pluralthree = "People use"; 

     person = 0; 
     preference = 0; 
     nothing = 0; 
     sugar = 0; 
     sweetner = 0; 

     for (person = 1; person <= 5; person++) 

     { 
      System.out.println("How do you sweeten your coffee"); 
      System.out.println("1. I Don't"); 
      System.out.println("2. With Sweetner"); 
      System.out.println("3. With Sugar"); 

      preference = input.nextInt(); 

      if (preference != 1 && preference != 2 && preference != 3) 
       System.out.println("Sorry that is not a valid option"); 

      else if (preference == 1) 
       nothing++; 

      else if (preference == 1) 
       sweetner++; 

      else 
       sugar++; 
     } 

     System.out.println("Survey Report"); 

     System.out.println("#############"); 

     if (nothing < 2) 

     { 
      pluralone = "person doesnt"; 
     } 

     System.out.println(nothing + " " + " " + pluralone + " sweeten thier coffee"); 

     if (sweetner < 2) 

     { 
      pluraltwo = "person uses"; 
     } 

     System.out.println(sweetner + " " + pluraltwo + " " + "sweetner to sweeten thier coffee"); 

     if (sugar < 2) 

     { 
      pluralthree = "person uses"; 
     } 

     System.out.println(sugar + " " + pluralthree + " " + "sugar to sweeten thier coffee "); 

    } 
} 

enter image description here

+2

Пожалуйста, не публикуйте текст на снимках экрана. Текст в виде текста. – khelwood

+0

Вы могли бы включить образец ввода для своей проблемы, фактический вывод и ожидаемый результат? – SomeJavaGuy

+0

Вопрос заключается в том, чтобы «ловить за пределы значений диапазона и убедиться, что ваша программа все еще обрабатывает 5 действительных выборов, THX для помощи – robbiedarza

ответ

0

Если вы меняете цикл для этого

for (person = 1; person <= 5; person ++) 
{ 
    System.out.println ("How do you sweeten your coffee"); 
    System.out.println ("1. I Don't"); 
    System.out.println ("2. With Sweetner"); 
    System.out.println ("3. With Sugar"); 

    preference = input.nextInt(); 

    while(preference != 1 && preference != 2 && preference != 3) { 
     System.out.println ("Sorry that is not a valid option"); 
     System.out.println ("How do you sweeten your coffee"); 
     System.out.println ("1. I Don't"); 
     System.out.println ("2. With Sweetner"); 
     System.out.println ("3. With Sugar"); 
     preference = input.nextInt(); 
    } 

    if(preference == 1) { 
     nothing ++; 
    } else if(preference == 2) { 
     sweetner ++; 
    } else if(preference == 3) { 
     sugar ++; 
    } 
} 

Это будет исправить это

+0

Хорошо, что очень благодарен mate ill попробуй. – robbiedarza

+0

Здравствуйте, я сделал цикл while, и он работает, спасибо вам большое. В то время как петли - следующая часть в буке, которая движется, так что это дало мне начало. Большое спасибо вам и всем остальным, кто ответил. Cheers, Robin – robbiedarza

3

просто задать для выбора пользователей в цикле в то время, так что он Безразлично» т продолжать до тех пор, действительный параметр не был введен, что-то вроде:

preference = input.nextInt(); 
while (preference != 1 && preference != 2 && preference != 3) { 
    System.out.println("Sorry that is not a valid option"); 
    preference = input.nextInt(); 
} 

в качестве альтернативы вы могли декремент person в вашей, если заявление, чтобы вызвать еще одну итерацию для цикла, но это немного Hacky:

if (preference != 1 && preference != 2 && preference != 3) { 
    System.out.println("Sorry that is not a valid option"); 
    person--; 
} 
+0

Thats great mate, спасибо за быстрый ответ – robbiedarza

+0

рад, что я мог бы помочь :) – jonk

0

Замените if/else коммутатором/корпусом:

preference = input.nextInt(); 
switch(preference) { 
    case 1: 
    nothing++; 
    break; 
    case 2: 
    sweetner++; 
    break; 
    case 3: 
    sugar++; 
    break; 
    default: 
    System.out.println("Sorry, thats not a valid option! Please pick a valid option"); 
    preference = input.nextInt(); 
    person--; 
    break; 

} 
0

Я сделал цикл while, и он работает, Большое спасибо Дэн. В то время как петли - это следующая часть книги, в которой я перемещаюсь, так что она дала мне начало. Огромное спасибо вам и всем остальным, которые ответили, несколько других вещей, предложенных, кажется немного продвинутыми для меня, но я знаю, что всегда могу ссылаться на комментарии, если они мне понадобятся в будущем. Еще раз спасибо, Робин.

+0

Эй, просто быстрая заметка на этом сайте, пожалуйста, не отправляйте сообщение в качестве ответа. Кроме того, если на вопрос был дан правильный ответ, нажмите галочку рядом с ответом, который, по вашему мнению, был правильным. Это просто позволяет другим знать, на вопрос был дан ответ, и он также дает вам и автору ответы точки репутации. Спасибо, Дэн. Постскриптум Я рад, что смогу помочь – Dan