Обработка ошибок ввода - PullRequest
0 голосов
/ 23 января 2012

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

Здесь я попросил пользователя ввести значения с клавиатуры.А позже, в зависимости от пользовательского ввода, я получаю значение или ключ из хэш-карты.

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

Например:

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

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

/ * * Чтобы изменить этот шаблон, выберите Сервис |Шаблоны * и откройте шаблон в редакторе.* / пакет 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;
            }

        }
    }
}
}

Ответы [ 2 ]

1 голос
/ 23 января 2012

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

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

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

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

0 голосов
/ 24 января 2012

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

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();
    }
}
...