2017-02-07 4 views
1

Я использую метод сканера для ввода пользователем одного из слов в строке, но else все еще выполняется, даже если пользователь вводит одну из строк. Как я могу это предотвратить?Как остановить else в if/else от выполнения?

public static void main(String[] args) {   
    while(true) { 
     StringBuffer StringBuffer = new StringBuffer(); 
     Scanner input = new Scanner(System.in); 
     System.out.println("Hi, what are you trying to find?"); 
     System.out.println("mass"); 
     System.out.println("vol"); 
     System.out.println("temp"); 
     System.out.println("sphere"); 
     System.out.println("density"); 
     String convert = input.nextLine(); 
     if (String.valueOf(convert).contains("mass, volume, sphere, temp, density, pound, ounce, ton, gram,")) { 
      StringBuffer.append(String.valueOf(convert)); 
     } else { 
      System.out.println("Wrong input. Try again."); 
     } 
    } 
} 
+1

Вам не нужен String.valueOf (конвертировать), просто конвертируйте. – Locke

ответ

1

В противоположном случае позвоните по номеру contains по вашей строке вариантов. И как Clone Talk упоминалось вам не нужно String.valueOf, так как convert уже String (Хотя, он работает с ней, как хорошо.):

public static void main(String[] args) { 
    while (true) { 
     StringBuffer StringBuffer = new StringBuffer(); 
     Scanner input = new Scanner(System.in); 
     System.out.println("Hi, what are you trying to find?"); 
     System.out.println("mass"); 
     System.out.println("vol"); 
     System.out.println("temp"); 
     System.out.println("sphere"); 
     System.out.println("density"); 
     String convert = input.nextLine(); 
     if ("mass, volume, sphere, temp, density, pound, ounce, ton, gram,".contains(convert)) { 
      StringBuffer.append(convert); 
     } else { 
      System.out.println("Wrong input. Try again."); 
     } 
    } 
} 

Решение комментарии:

почему if(convert.contains("....")) Безразлично» t работает?

Самый простой способ взглянуть на the documentation of String.contains: возвращает истину, если и только если эта строка содержитуказанная последовательность полукокса значений.

эта строка в исходном примере из вопроса (не в моем ответе) является convert, который может быть либо "mass" или "volume" или т.п .;

указанная последовательность значений char такова, что длинная строка "mass, volume, ...".

Итак, как, например, "mass" может содержать "mass, volume, etc."? Это наоборот, действительно: "mass, volume, etc.".contains("mass") == true

HashSet.contains будет более производительным

Он не похож на строки будут достаточно большими, чтобы чувствовать прирост производительности в этом примере, но вообще говоря, это хороший момент, особенно если количество возможных входов не мало и для удобства чтения и обслуживания. У вас может получиться так:

// This part may vary: 
private static String [] variants = {"mass", "volume", "sphere", "temp", "density", "pound", "ounce", "ton", "gram"}; 
private static Set<String> inputs = new HashSet<>(Arrays.asList(variants)); 

public static void main(String[] args) { 
    while (true) { 
     StringBuffer StringBuffer = new StringBuffer(); 
     Scanner input = new Scanner(System.in); 
     System.out.println("Hi, what are you trying to find?"); 
     System.out.println("mass"); 
     System.out.println("vol"); 
     System.out.println("temp"); 
     System.out.println("sphere"); 
     System.out.println("density"); 
     String convert = input.nextLine(); 
     if (inputs.contains(convert)) { 
      StringBuffer.append(convert); 
     } else { 
      System.out.println("Wrong input. Try again."); 
     } 
    } 
} 
+0

ум объясняет, почему 'if (convert.contains (" .... "))' не работает? – Yousaf

+0

@ Yousaf см. Мое обновление. – zhelezoglo

+1

'HashSet.contains' будет более результативным, хотя :) –