Сопоставление букв с цифрами на клавиатуре телефона

#java #function #for-loop

#java #функция #for-цикл

Вопрос:

Кажется, я не могу найти проблему с этим кодом. Я пытаюсь преобразовать номер телефона, который состоит из цифр и букв, только в цифры. Например, 1800SMILEING должно быть переведено в 1800-764-5464. Но мой код повторяет последнюю цифру в каждой группе. 180048-766-5466 вместо правильного формата. Он также генерирует дополнительные 48 после 800. Пожалуйста, помогите, я много часов работал над этим для своей домашней работы по курсу Java, но я не могу понять проблему.

 import java.util.Scanner;

public class PhoneNumberConverter {

    public static void main(String[] args) {
        System.out.println("Enter a phone number to convert:");
        Scanner input = new Scanner(System.in);
        String phoneNumber = input.next();
        
        input.close();
        
        int firstGroup = translatePhoneNumber (phoneNumber, 0, 4);
        System.out.print(firstGroup);
        System.out.print("-");
        
        int secondGroup = translatePhoneNumber (phoneNumber, 4, 6);
        System.out.print(secondGroup);
        System.out.print("-");
        
        int thirdGroup = translatePhoneNumber (phoneNumber, 7, 10);
        System.out.print(thirdGroup);
        
    }
    
    public static int translatePhoneNumber (String phoneNumber, int firstIndex, int lastIndex) {
    
        int chartoNumber = 'A';
        int currentIndex;   
        if (firstIndex != 0) {
        
            for (currentIndex = firstIndex; currentIndex < lastIndex; currentIndex  ) {
                if (phoneNumber.charAt(currentIndex) == 'A' || phoneNumber.charAt(currentIndex) == 'B' || phoneNumber.charAt(currentIndex) == 'C' )
                    chartoNumber = 2;
                else if (phoneNumber.charAt(currentIndex) == 'D' || phoneNumber.charAt(currentIndex) == 'E' || phoneNumber.charAt(currentIndex) == 'F' )
                    chartoNumber = 3;
                else if (phoneNumber.charAt(currentIndex) == 'G' || phoneNumber.charAt(currentIndex) == 'H' || phoneNumber.charAt(currentIndex) == 'I' )
                    chartoNumber = 4;
                else if (phoneNumber.charAt(currentIndex) == 'J' || phoneNumber.charAt(currentIndex) == 'K' || phoneNumber.charAt(currentIndex) == 'L' )
                    chartoNumber = 5;
                else if (phoneNumber.charAt(currentIndex) == 'M' || phoneNumber.charAt(currentIndex) == 'N' || phoneNumber.charAt(currentIndex) == 'O' )
                    chartoNumber = 6;
                else if (phoneNumber.charAt(currentIndex) == 'P' || phoneNumber.charAt(currentIndex) == 'Q' || phoneNumber.charAt(currentIndex) == 'R' || phoneNumber.charAt(currentIndex) == 'S' )
                    chartoNumber = 7;
                else if (phoneNumber.charAt(currentIndex) == 'T' || phoneNumber.charAt(currentIndex) == 'U' || phoneNumber.charAt(currentIndex) == 'V' )
                    chartoNumber = 8;
                else if (phoneNumber.charAt(currentIndex) == 'W' || phoneNumber.charAt(currentIndex) == 'X' || phoneNumber.charAt(currentIndex) == 'Y' || phoneNumber.charAt(currentIndex) == 'Z' )
                    chartoNumber = 9;
                else
                    chartoNumber =  phoneNumber.charAt(currentIndex);
                
                    System.out.print(chartoNumber); 
                    
                }
        } else {
            for (currentIndex = firstIndex; currentIndex < lastIndex; currentIndex  ) {
                chartoNumber =  phoneNumber.charAt(currentIndex);
                char numbeeer = (char) chartoNumber;
                System.out.print(numbeeer);
            }   
        }
        return chartoNumber;    
    }       
}
  

Ответ №1:

Во-первых, обратите внимание, что вы распечатываете свой результат в самом translatePhoneNumber методе, вам не нужно снова распечатывать результат.

Избавьтесь от System.out.print(firstGroup); etc.

Во-вторых, if (firstIndex != 0) { почему? Обратите внимание, что при translatePhoneNumber (phoneNumber, 0, 4); этом firstIndex будет 0

Лично я бы просто передал подстроку в метод и цикл для каждого символа.

 translatePhoneNumber (phoneNumber.substring (0, 4));

....

for (char c : localPhoneNumber) {
    // your mapping
}
  

Комментарии:

1. Действительно, я печатал избыточные символы. Я избавился от ненужного оператора печати и теперь получаю правильное форматирование. Спасибо!