Я выполняю упражнение 3 из главы 4 книги «Введение в Java» Уолтера Савича. Инструкции: Разработайте алгоритм простой игры в угадывание по секретному пятизначному коду. Когда пользователь вводит предположение в коде, программа возвращает два значения: количество цифр в предположении, которые находятся в правильной позиции, и сумму этих цифр. Например, если секретный код os 53840 и пользователь угадывают 83241, цифры 3 и 4 находятся в правильном положении. Таким образом, программа должна ответить 2 и 7. Разрешить пользователю угадывать фиксированное число раз
Текущие проблемы:
- мой код выглядит грязным и слишком длинным. Я новичок, но ищу способы сделать его более эффективным
- при вводе «числа догадки», которое начинается с любого другого числа, кроме 0, но работает, но когда оно начинается с 0, моя программа игнорирует первыйцифра
Я потратил на это два часа. В этой главе меня ждут еще 25 упражнений, поэтому я надеюсь быть более эффективными с другими упражнениями.
public static void main(String[] args) {
int SecretCode = 12140;
int Win = 0;
//just checking the incrementor
int sum = 0;
System.out.println("Ceci est un jeu de lotterie. \nPouvez-vous deviner le nombre à 5 chiffres caché ?\n");
Scanner fromPlayer = new Scanner(System.in);
do {
System.out.println("Votre nombre porte-bonheur: ");
int guess = fromPlayer.nextInt();
//Interprets Guess int to string
String stringGuess = String.valueOf(guess);
int length = stringGuess.length();
boolean CorrectLength = (length == 5);
if (CorrectLength) {
String Firstdigit = stringGuess.substring(0, 1);
String Seconddigit = stringGuess.substring(1, 2);
String Thirddigit = stringGuess.substring(2, 3);
String Fourthdigit = stringGuess.substring(3, 4);
String Fifthdigit = stringGuess.substring(4);
//Interprets Secret Code int to string
String stringSecretCode = String.valueOf(SecretCode);
String FirstdigitCode = stringSecretCode.substring(0, 1);
String SeconddigitCode = stringSecretCode.substring(1, 2);
String ThirddigitCode = stringSecretCode.substring(2, 3);
String FourthdigitCode = stringSecretCode.substring(3, 4);
String FifthdigitCode = stringSecretCode.substring(4);
//Just checking the values that the program will compare to secret code
System.out.println("Vous avez entré \n" + Firstdigit + "\n" + Seconddigit + "\n" + Thirddigit + "\n" + Fourthdigit + "\n" + Fifthdigit);
if (Firstdigit.equals(FirstdigitCode)) {
Win = Win + 1;
sum = sum + Integer.parseInt(Firstdigit);
System.out.println("Premier numéro est : correct. Score: " + Win);
} else {
System.out.println("Premier numéro est : incorrect. Score:" + Win);
}
if (Seconddigit.equals(SeconddigitCode)) {
Win = Win + 1;
sum = sum + Integer.parseInt(Seconddigit);
System.out.println("Deuxième numéro est : correct. Score: " + Win);
} else {
System.out.println("Deuxième numéro est : incorrect. Score: " + Win);
}
if (Thirddigit.equals(ThirddigitCode)) {
Win = Win + 1;
sum = sum + Integer.parseInt(Thirddigit);
System.out.println("Troisième numéro est : correct. Score: " + Win);
} else {
System.out.println("Troisième numéro est : incorrect. Score: " + Win);
}
if (Fourthdigit.equals(FourthdigitCode)) {
Win = Win + 1;
sum = sum + Integer.parseInt(Fourthdigit);
System.out.println("Quatrième numéro est : correct. Score: " + Win);
} else {
System.out.println("Quatrième numéro est : incorrect. Score: " + Win);
}
if (Fifthdigit.equals(FifthdigitCode)) {
Win = Win + 1;
sum = sum + Integer.parseInt(Fifthdigit);
System.out.println("Cinquième numéro est : correct. Score: " + Win);
} else {
System.out.println("Cinquième numéro est : incorrect. Score: " + Win);
}
System.out.println("Vous avez deviné " + Win + " numéros. Leur total vaut " + sum);
} else {
System.out.println("ERREUR. Il faut entrer 5 chiffres.");
}
Я ожидаю, что результат 02140 будет "Premier numéro est: неверный. Оценка: 0 Deuxième numéro est: правильный. Оценка: 1 Troisième numéro est: правильный. Оценка: 2 Quatrième numéro est: правильныйОценка: 3 Cinquième numéro est: правильно. Оценка: 4 Vous avez deviné 4 numéros. Leur total vaut 7 "
НО фактический результат: ERREUR. Il faut entrer 5 шифер. как будто программа не идентифицирует 0 как цифру.