2016-11-15 3 views
0

Я борюсь с программой, которая позволяет пользователю выбирать между двумя цветами, набирая либо полный цвет (не чувствительный к регистру), либо символ, который является первой буквой цвета (не чувствителен к регистру), в зависимости от того, какой цвет они печатают его, автоматически присваивают другой переменной. Мои два варианта - синий и зеленый, синий, кажется, работает нормально, но когда я вводим зеленый или g, метод продолжает спрашивать меня о новом вводе. Ниже приведен фрагмент моей программы, посвященной назначению цвета.Подтверждение ввода нескольких цветов строки?

import java.util.*; 
public class Test{ 
    public static Scanner in = new Scanner (System.in); 
    public static void main(String []args){ 

    System.out.println("Chose and enter one of the following colors (green or blue): "); 
    String color = in.next(); 
    boolean b = false; 
    while(!b){ 
     if(matchesChoice(color, "blue")){ 
     String circle = "blue"; 
     String walk = "green"; 
     b = true; 
     } 
     else if(matchesChoice(color, "green")){ 
     String circle = "green"; 
     String walk = "blue"; 
     b = true; 
     } 
    }  

    } 
    public static boolean matchesChoice(String color, String choice){ 
    String a= color; 
    String c = choice; 
    boolean b =false; 
    while(!a.equalsIgnoreCase(c.substring(0,1)) && !a.equalsIgnoreCase(c)){ 
     System.out.println("Invalid. Please pick green or blue: "); 
     a = in.next(); 
    } 
    b = true; 
    return b; 

    } 

} 

Я в основном создавая время цикла, который страхует пользователь выбирает один из вариантов цвета и способа определения, соответствует ли входной строке пользователя опции Строки для вопроса.

+0

Поскольку ваш поток код не является правильно, 'else if (matchesChoice (цвет,« зеленый »))' недоступен до тех пор, пока вы не введете «синий» или «b» – Jerry06

+0

@ Jerry06, что вы подразумеваете, ввод синий или b необходим для достижения зеленого? –

ответ

1

else if(matchesChoice(color, "green")) недоступен. Метод matchesChoice(color, "blue") вызывается при вводе g или green, поэтому он всегда сравнивает его с b или blue. Затем внутри этого метода он продолжает цикл, потому что вы продолжаете вводить g или green.

Просто matchesChoice вернуть true или false если color матчи choice:

public static boolean matchesChoice(String color, String choice){ 
    String a= color; 
    String c = choice; 
    if (a.equalsIgnoreCase(c.substring(0,1)) || a.equalsIgnoreCase(c)) { 
     return true; 
    } 
    return false; 
} 

Затем добавить проверку на наличие пользовательского ввода внутри цикла в то время как основной:

boolean b = false; 
System.out.println("Chose and enter one of the following colors (green or blue): "); 
while(!b){ 
    String color = in.next(); 
    if(matchesChoice(color, "blue")){ 
     String circle = "blue"; 
     String walk = "green"; 
     b = true; 
    } 
    else if(matchesChoice(color, "green")){ 
     String circle = "green"; 
     String walk = "blue"; 
     b = true; 
    } 
    else { 
     System.out.println("Invalid. Please pick green or blue: "); 
    } 
} 
+0

Я вижу ошибку сейчас. Я применил это к своему коду, и программа работает сейчас. –

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