Вывод множества нулей после завершения кода

#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 so if (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]); 
    }
}
  

Наконец, обратите внимание, что цикл имеет только пять итераций. Не уверен, что это предназначено, но таким образом вы не сравниваете «Мегабалл».