Нужно вернуть правильное значение номера по стандарту. Java работа со Strings. Уже много вариантов попробовал, вот последний из них
Основная часть гос регистрационного номера состоит из 6 символов: 3-ех букв и 3-ех цифр. Сначала идет буква, потом три цифры. Можно использовать любые цифры от 0 до 9, в качестве букв только следующие символы: A,B,C,E,H,K,M,O,P,T,X,Y. Например A304BT - правильный номер, а M134UO и CBA230 - нет. Ваше задание определить какие из номеров отвечают стандарту, а какие нет. Функция принимает ряд - автомобильный номер. Функция возвращает 100, если номер правильный, или количество букв в номере, если он не отвечает стандарту.
static int resolve(String line) {
String ours = "";
char[] chars = {'A', 'B', 'C', 'E', 'H', 'K', 'M', 'O', 'P', 'T', 'X', 'Y'};
char[] numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
if (line.equals(ours)) {
for (int i = 0; i < chars.length; i++) {
for (int j = 0; j < numbers.length; j++) {
for (int k = 0; k < 7; k++) {
}
}
}
return 100;
} else {
return line.length();
}
}
public static void main(String[] args) {
System.out.println(resolve("P204BT"));
}
Ответы (1 шт):
У вас слишком высокая вложенность : три вложенных цикла в условном операторе. Старайтесь от такого избавляться. Во-первых, это делает код достаточно тяжелым для понимания, во-вторых, вы можете получит проблемы с производительностью (на каждую 1 итерацию внешнего цикла приходится перебирать все элементы второго, а у вас еще есть третий). Кроме того, я не совсем понял условия: для некорректного нужно вернуть количество букв в номере, но при этом ваш код возвращает длину строки (return line.length()). Полагаю, что в коде ошибка, поэтому исхожу из описанного условия. Решение примерно такое:
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Program {
private final static Set<Character> CORRECT_LETERS = Stream.of('A','B','C','E','H','K','M','O','P','T','X','Y').collect(Collectors.toSet());
public static int resolve(String line) {
if (line==null) return 0;
int letterNumber = 0;
boolean isCorrectNumber = line.length()==6;
char[] charArray = line.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (Character.isLetter(charArray[i])) letterNumber++;
isCorrectNumber = check(i, charArray[i], isCorrectNumber);
}
return isCorrectNumber ? 100 : letterNumber;
}
private static boolean check(int i, char ch, boolean isCorrectNumber) {
if (!isCorrectNumber) return isCorrectNumber;
return (i==0||i==4||i==5) ? CORRECT_LETERS.contains(ch) : Character.isDigit(ch);
}
public static void main(String[] args) {
System.out.println(resolve("A304BT"));
System.out.println(resolve("M134UO"));
System.out.println(resolve("CBA230"));
}
}