Чтение целого числа и строки из консоли - PullRequest
1 голос
/ 29 декабря 2011

Я реализовал два Hashtable, как показано ниже.

HashMap<Integer,String> streetno=new HashMap<Integer,String>();
   streetno.put(1, "Sachin Tendulkar");
   streetno.put(2, "Dravid");
   streetno.put(3,"Sehwag");
   streetno.put(4,"Laxman");
   streetno.put(5,"Kohli");


HashMap<String,Integer> streetname=new HashMap<String,Integer>();
   streetname.put("Sachin Tendulkar",1);
   streetname.put("Dravid",2);
   streetname.put("Sehwag",3);
   streetname.put("Laxman",4);
   streetname.put("Kohli",5);
   Iterator itr=streetno.keySet().iterator();

Теперь я прошу пользователя ввести данные. Если он вводит целое число, я хочу получить определенное значение из 1-й хеш-таблицы, а если пользователь вводит строку, я хочу прочитать конкретное целое число из 2-й хеш-таблицы.

У меня вопрос "Как я могу прочитать ввод от пользователя ??" Потому что я не знаю, вводит ли пользователь целое число или строку ?? И я также хотел знать, могу ли я получить конкретное значение с помощью Iterator в зависимости от ключа?

Ответы [ 6 ]

1 голос
/ 29 декабря 2011

Во-первых, вам нужно прочитать стандартный ввод.Для упрощения обработайте его сначала как строку.

   Scanner scanner=new Scanner(System.in);
   String userInput=scanner.nextLine();

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

   String sName;
   Integer iNumber;
   try {
       iNumber=Integer.parseInt(userInput);
       //user intruduced a number, so get the streename
       sName=streetno.get(iNumber);

   } catch (NumberFormatException e) {
       //user introduced a not-numeric String, so get the streetnumber
       sName=userInput;
       iNumber=streetname.get(sName);
   }

Вам не нужно перебиратьkeyset, так как метод Map.get() вернет вам соответствующее значение.

наконец, не забудьте отпустить сканер (лучше в блоке finally):

scanner.close();
1 голос
/ 29 декабря 2011

Как я могу прочитать ввод от пользователя ??

Что-то вроде

String line = scanner.nextLine();

Потому что я не знаю, вводит ли пользователь целое число или строку ??

Попробуйте преобразовать его в целое число

try {
  int num = Integer.parseInt(line);
  // lookup by number

} catch(NumberFormatException ignored) {
  // lookup by string

}

Могу ли я получить конкретное значение, используя Iterator, в зависимости от ключа?

Итератор предназначен для итерации, а карта предназначена для поиска по ключу.

0 голосов
/ 29 декабря 2011

Вы можете прочитать ввод, как указано в других ответах. Я просто попробовал основную логику таким образом. Если можно объединить две карты, попробуйте этот способ.

            String input = "Laxman";            
            HashMap<String, String> street = new HashMap<String, String>();
            street.put("1", "Sachin Tendulkar");
            street.put("2", "Dravid");
            street.put("3", "Sehwag");
            street.put("4", "Laxman");         

            for (Map.Entry<String, String> entry : street.entrySet()) { 
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
                if (input.equals(entry.getKey())) {
                    System.out.println(entry.getValue());   
                    break;
                } else if (input.equals(entry.getValue())) {
                    System.out.println(entry.getKey());   
                    break;
                }               
            }                
0 голосов
/ 29 декабря 2011

Вы можете использовать класс Scanner для извлечения пользовательского ввода.У него есть несколько полезных методов, таких как nextInt() or nextLine(), которые могут использоваться для вашего удобства, чтобы определить, ввел ли пользователь целое число или строку.

Вы также можете заставить пользователя «сказать», что он вводит заранее -int или string.Но это не очень удобно для пользователя.

Чтобы получить значение из HashMap, используйте метод get(key) при предоставлении ключа.

0 голосов
/ 29 декабря 2011

Чтение ввода в виде строки; если оно может быть проанализировано как целое число, используйте streetno, в противном случае используйте streetname.

0 голосов
/ 29 декабря 2011

Полагаю, вам нужно будет использовать Integer.parseInt, чтобы выяснить, является ли ввод целым или нет.

К сожалению, в java на самом деле нет «tryParse» или чего-то подобного, так что вам придется просто поймать исключение. Вы могли бы использовать регулярное выражение, чтобы проверить, является ли оно числовым или нет, но это может быть больше хлопот, чем стоит.

Что касается чтения с консоли, я бы использовал:

Scanner console = new Scanner( System.in );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...