Перебирая слово буква за буквой, выведите число, соответствующее этой букве / символу - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь создать программу для чтения телефона.Если пользователь вводит слово, программа выводит эквивалентный номер телефона.Используя while, if и подстроки, как мне поступить?

Я пытался использовать while, string replace и for.

   Scanner keyboard = new Scanner (System.in);

   String phoneWord;
   int length, i ;

   phoneWord = keyboard.nextLine();
   length = phoneWord.length();



   while (i < length) {

Я ожидаю вывода эквивалентного номера телефона.ех.если в слове есть буква A, она выведет 1 в соответствующем месте.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Это должно помочь вам начать.Просто поставьте цифры на соответствующие буквы, и все будет хорошо.

import java.util.HashMap;
import java.util.Scanner;

public class Main {

    public static void main(String args[]) throws Exception {

        Scanner keyboard = new Scanner(System.in);

        HashMap<Character, Integer> textToNum = new HashMap<Character, Integer>();

        ///Letters to their corresponding numbers here
        textToNum.put('a', 1);
        textToNum.put('b', 2);
        textToNum.put('c', 3);

        String phoneWord = keyboard.nextLine();
        String result = "";

        for(int i = 0; i < phoneWord.length(); i++) {
            result += textToNum.get(phoneWord.charAt(i));
        }

        System.out.println(result);
    }

}

Надеюсь, это поможет.

0 голосов
/ 14 февраля 2019

Есть несколько способов сопоставить буквы цифре.Если вы хотите простое сопоставление, a:1,b:2,...,i:9,j:10,...,z:26 вы можете сделать следующее и воспользоваться преимуществами сопоставления фактов с целочисленными значениями:

    StringBuilder sb= new StringBuilder();
    for (char letter : phoneWord.toLowerCase().toCharArray()) {
        sb.append((int) letter - 96);
    }
    System.out.println(sb.toString());

Вы можете добавить модуль для сохранения чисел от 0 до 9 с помощью%10 это будет карта a:1,b:2,...,i:9,j:0,...,z:6

    sb = new StringBuilder();
    for (char letter : phoneWord.toLowerCase().toCharArray()) {
        sb.append(((int) letter - 96) % 10);
    }
    System.out.println(sb.toString());

Если вы хотите, чтобы пользовательское отображение, такое как в телефоне, вы можете создать карту следующим образом:

    Map<Character, Integer> letterMap = new HashMap<>();
    letterMap.put('a', 1);
    letterMap.put('b', 1);
    letterMap.put('c', 1);
    letterMap.put('d', 2);
    // ...
    letterMap.put('z', 9);

    sb = new StringBuilder();
    for (char letter : phoneWord.toLowerCase().toCharArray()) {
        sb.append(letterMap.get(letter));
    }
    System.out.println(sb.toString());

Яиспользуя .toLowerCase() в строке, чтобы уменьшить количество букв, которые необходимо отобразить.Как (int) 'A' = 65 и (int) 'A' = 97

...