#java #arrays
#java #массивы
Вопрос:
У меня возникли проблемы с кодом, печатающим совпадающие числа. Результат моего терминала выглядит следующим образом:
Choose Five Numbers: 5 6 7 8 99
Choose Mega Ball: 56
You Chose Following:
5 6 7 8 99 Mega Ball - 56.
DRAW RESULT:
15 14 5 11 19 Mega Ball - 14.
Matched Numbers are:
You are a Winner!!
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Я не уверен, чего мне не хватает, или если мой код не весь в правильном порядке, или если я неправильно расставляю скобки, и он что-то не читает. Спасибо
import java.util.Random;
import java.util.ArrayList;
import java.util.Scanner;
public class Class1KRP {
public static void main (String[]args)
{
int[] randomNumbers = new int[6]; // Stores 6 random numbers
int[] inputNumbers = new int[6]; // Stores 6 numbers given by user
ArrayList<Integer> equalNumbers = new ArrayList<Integer>(); // Stores matched numbers
Random rand = new Random();
Scanner in = new Scanner(System.in);
System.out.print("Choose Five Numbers: ");
int[] numbers = new int[6];
for (int i = 0; i < 5; i ) {
numbers[i] = in.nextInt();
}
System.out.print("Choose Mega Ball: ");
numbers[5] = in.nextInt();
System.out.println("You Chose Following:");
for (int i = 0; i < 5; i ) {
System.out.print(numbers[i] " ");
}
System.out.println("Mega Ball - " numbers[5] ".");
//Generates 6 Random Numbers in the range 1 -20
for(int i = 0; i < numbers.length; i ) {
numbers[i] = (int)(Math.random()*20 1);
}
System.out.println("DRAW RESULT: ");
for (int i = 0; i < 5; i ) {
System.out.print(numbers[i] " ");
}
System.out.println("Mega Ball - " numbers[5] ".");
//Comparing random numbers array and user input numbers array
for (int i=0;i<5;i )
{
for (int j=0;j<5;j )
{
if (randomNumbers[i] == inputNumbers[j]) { // Comparing matched numbers
equalNumbers.add(randomNumbers[i]); // Adding matched number to Array list
}
}
}
// Printing final output
if (equalNumbers.size() != 0) { // At least one matched number is there
System.out.println("Matched Numbers are: ");
System.out.println("You are a Winner!!");
for(int i:equalNumbers)
{
System.out.println(i); // Printing list of matched numbers
}
}
else { // If no matched numbers
System.out.println("You are a Loser.");
}
}
}
Комментарии:
1. Вы никогда ничего не вводите в
randomNumbers
иinputNumbers
soif (randomNumbers[i] == inputNumbers[j])
всегда верно, потому что они оба содержат только нули, вы добавляете эти нули вequalNumbers
, а затем печатаете это.2. Опечатка:
numbers[i] = (int)(Math.random()*20 1);
должно бытьrandomNumbers
.3. Если ваше назначение не требует от вас использования массивов для этого, рассмотрите возможность использования
Set<Integer>
для обоих наборов чисел. ЗатемretainAll()
выдаст вам совпадающие числа.
Ответ №1:
Вы никогда не используете свои два массива randomNumbers
и inputNumbers
. Вместо этого вы всегда используете numbers
. Итак, при сравнении ваших первых двух массивов они содержат только нули и, следовательно, всегда равны.
Кроме того, при проверке на равенство вы генерируете все перестановки индексов i
и j
. Но вас действительно интересуют только случаи, когда i == j
второй вложенный цикл является избыточным. Вот почему вместо того, чтобы печатать только пять нулей, он печатает 25 нулей. Измените его двумя следующими:
for (int i = 0; i < 5; i ) {
if (randomNumbers[i] == inputNumbers[i]) {
equalNumbers.add(randomNumbers[i]);
}
}
Наконец, обратите внимание, что цикл имеет только пять итераций. Не уверен, что это предназначено, но таким образом вы не сравниваете «Мегабалл».