#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. Действительно, я печатал избыточные символы. Я избавился от ненужного оператора печати и теперь получаю правильное форматирование. Спасибо!