2012-01-23 4 views
0

Здесь я пытаюсь получить значения и ключи с карты Hash в зависимости от ввода пользователя.Обработка входов ошибок

Здесь я попросил пользователя ввести значения с клавиатуры. И позже, в зависимости от ввода пользователей, я получаю значение Value или Key из Hash-карты.

На данный момент он работает нормально. Но я хочу обработать условия ошибки.

например:

  1. Что делать, если пользователь даст, кроме M/N или Q в 1 System.out.println заявление().
  2. Что делать, если пользователь недействителен для основного номера и так далее.

Как и я, я хочу обрабатывать все возможные условия ошибки после запроса пользователя для ввода в инструкции System.out.println().

/* * Чтобы изменить этот шаблон, выберите «Инструменты» | Шаблоны * и откройте шаблон в редакторе. */ package cricketpur;

import java.lang.*; 
    import java.util.*; 
    import java.io.*; 
    public class Main { 


public static void main(String[] args) { 
    // TODO code application logic here 

    HashMap<String, String> streetno = new HashMap<String, String>(); 
    streetno.put("1", "Sachin Tendulkar"); 
    streetno.put("2", "Dravid"); 
    streetno.put("3", "Sehwag"); 
    streetno.put("4", "Laxman"); 
    streetno.put("5", "Kohli"); 
    Scanner s = new Scanner(System.in); 
    String a; 
    String inp; 

    for (;;) { 
     System.out.println("Enter M/N and Q to quit:"); 
     a = s.nextLine(); 

     if ((a == null ? "M" == null : a.equals("M")) || a.equals("m")) { 
      System.out.println("Enter the Main number:"); 
      inp = s.nextLine(); 
     } else if ((a == null ? "Q" == null : a.equals("Q")) || a.equals("q")) { 
      break; 
     } else { 
      System.out.println("Enter the Street name:"); 
      inp = s.nextLine(); 

     } 
     for (Map.Entry<String, String> entry : streetno.entrySet()) { 

      if (inp.equals(entry.getKey())) { 
       System.out.println(entry.getValue()); 
       break; 
      } else if (inp.equals(entry.getValue())) { 
       System.out.println(entry.getKey()); 
       break; 
      } 

     } 
    } 
} 
} 
+0

Из интереса, что это должно делать: '(a == null?" M "== null: a.equals (" M ")) || a.equals ("м") '? – NPE

+0

Это условие просто проверяет, является ли он капиталом M или малым m .. Вот и все .. Если какое-либо из одного условия выполнено, оно входит в условие if. –

ответ

0

Проверьте, действительно ли их ввод действителен, а если нет, попросите их ввести его еще раз

System.out.println("Enter M/N and Q to quit:");  
while(true) 
{ 
    a = s.nextLine(); 
    if(/*a is valid*/) 
    { 
     break; 
    } 
    else 
    { 
     System.out.println("Insert invalid input message here. Enter M/N and Q to quit:");  
     a = s.nextLine(); 
    } 
} 
1

У вас есть hashmap. Вам не нужно сравнивать ключи. Просто посмотрите, является ли streetno.get(inp) нулевым или нет. Если он не является нулевым, вы можете отобразить это значение, а если оно равно null, вы можете отобразить сообщение об ошибке.

Также, "M"==null является ложным, всегда. null - особое значение, означающее «no value». Сравнение ненулевых значений с null не даст вам то, что вы хотите. Вы можете упростить проверки, как:

if("M".equals(a) || "m".equals(a)) { ... } 

Ваш текущий код будет блевать на нулевых входов, из-за a.equals("m") бит, который выполняется. (Я полагаю, однако, что Scanner вернет пустую строку, а не null, если пользователь просто нажал Enter.)

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