Поиск и подсчет одного случайного числа в массиве из 20 целых чисел

У меня есть программа, которая создает массив из 20 целых чисел. Затем создает одно случайное число в том же диапазоне. То, что я пытаюсь сделать, это найти массив из 20 целых чисел и подсчитать, сколько раз это единственное случайное число встречается, и распечатать результат или, если целое число отсутствует, отобразить «нет». Я чувствую, что я так близко, но я получаю неправильный счет для случайного целого числа. Заранее спасибо. Периметры для метода поиска: • Тип данных метода недействителен, поскольку данные не возвращаются.

• У него будет три параметра – массив целых чисел, размер массива и значение, которое он будет искать в массиве.

• Он будет искать в массиве и подсчитывать, сколько раз значение было найдено.

• Затем он либо распечатает, сколько раз значение было найдено, либо что значение не было найдено.

Мой код и извините, если он не имеет правильного отступа, все еще выясняя это:

import java.util.Scanner;
import java.util.Random;
class Main{
 public static final Random RND_GEN = new Random();
   public int[] createNum(int[] randomNumbers) {
    for (int i = 0; i < randomNumbers.length; i++) {
        randomNumbers[i] = RND_GEN.nextInt(10) + 1;
    }
    return randomNumbers;
}

public void printNum(int[] randomNumbers){
    for (int i = 0; i < randomNumbers.length; i++) {
        System.out.println("Number " + i + " : " + randomNumbers[i]);
    }
    System.out.println("Single # is: " + (RND_GEN.nextInt(10) + 1)); 
}

public void searchArray(int[] randomNumbers,int numSearch) {
int count = 0;
for (int i : randomNumbers) {
    if (i == numSearch) {
        count++;
    }
}
if (count == 0) {
    System.out.println("Single #" + numSearch + " was not found!");
} else {
    System.out.println("Single # "+ numSearch + " was found " + count + "   times");
}
}




public void run() {
    Scanner inputReader = new Scanner(System.in);
    int x = 1;
    do {
        int[] numbers = new int[20];
        numbers = createNum(numbers);
        printNum(numbers);
        int numSearch = RND_GEN.nextInt(10) + 1;
        searchArray(numbers, numSearch);
        System.out.print("Restart Program?, Enter 1 for YES, 2 for NO: ");
        x = inputReader.nextInt();
    } while (x == 1);
}

public static void main(String[] args) {
    Main go = new Main();
    go.run();
}
}

person kidbone222    schedule 12.04.2016    source источник


Ответы (3)


Ты почти там. Вы уже сделали работу по созданию метода поиска, вы просто не вызываете его. Измените свой метод searchArray, чтобы распечатать количество вхождений в конце, поскольку это требование, которое вы делаете.

public void searchArray(int[] randomNumbers, int numSearch) {
    int count = 0;

    for (int i : randomNumbers) {
        if (i == numSearch) {
            count++;
        }
    }
    if (count == 0) {
        System.out.println("Single #" + numSearch + " was not found!");
    } else {
        System.out.println("Single # "+ numSearch + " was found " + count + " times");
    }
}

Затем вы можете назвать это так:

searchArray(numbers, numSearch);
person robotlos    schedule 12.04.2016
comment
Как мне определить, какое целое число искать, поскольку целое число генерируется случайным образом, и как мне распечатать дисплей, если случайное число не найдено? - person kidbone222; 12.04.2016
comment
@kidbone222 kidbone222, я обновил, чтобы он распечатывал сообщение о том, что не найдено, когда счетчик равен 0. Да, вы можете использовать свое случайное число в качестве параметра, я обновил свой ответ, чтобы отразить, как вы это сделаете. - person robotlos; 12.04.2016
comment
@ robotlos Я понимаю, что нужно вызвать массив, который я бы поместил в метод запуска void, однако, когда это будет сделано, я получаю сообщение об ошибке, что символ для numSearch не может быть найден. Знаете, почему это было бы? - person kidbone222; 12.04.2016
comment
@kidbone222, вам нужно вызвать searchArray(numbers, numSearch); после строки int numSearch = RND_GEN.nextInt(10) + 1; в вашем методе run() . - person robotlos; 12.04.2016
comment
спасибо, я буквально только что понял это, прежде чем я вернулся и собирался поблагодарить вас. Теперь единственная проблема в том, что я получил один номер из 6, но он засчитывался для другого числа, а не для того, сколько раз 6 появлялось.. странно @robotlos - person kidbone222; 12.04.2016
comment
Я попытался изменить индекс на мой ранее указанный индекс и по-прежнему получал тот же тип ошибки, похоже, он просто выбирает случайное число в исходном массиве и подсчитывает, а не подсчитывает, сколько раз появляется одно число. @роботлос - person kidbone222; 12.04.2016
comment
@ robotlos Я собираюсь отредактировать здесь свой код, чтобы показать вам, что происходит после запуска программы. - person kidbone222; 12.04.2016
comment
@kidbone222 Вы пытаетесь найти конкретное число или случайное? - person robotlos; 13.04.2016
comment
Я ищу любое случайное число, которое генерируется после того, как первая группа из 20 чисел сгенерирована и помещена в массив - person kidbone222; 13.04.2016
comment
@kidbone222 Тогда тебе нужно searchArray(numbers, numbers[0]); - person robotlos; 13.04.2016

Вы сделали небольшую ошибку в своем run() методе`:

int numSearch = RND_GEN.nextInt(10) + 1;
System.out.println("Number found this many times: "+ numSearch);

Это дает вам случайное число от одного до 10, но вы хотите подсчитать фактическое появление numbers[0], поэтому вам нужно использовать свой метод searchArray().

Поэтому вам нужно добавить тип возвращаемого значения и вернуть count:

public int searchArray(int[] randomNumbers,int numSearch) {
        int count = 0;

        for(int i : randomNumbers) {
            if (i == numSearch) {
                count++;
            }
        }
    return count;
 }

Затем вы получаете свой счет:

int numSearch = searchArray(numbers, numbers[0]);
person Dimitrios Begnis    schedule 12.04.2016
comment
К сожалению, я должен сделать это с помощью void, а не int, потому что данные не возвращаются. Вот параметры для этого метода: Тип данных метода недействителен, потому что данные не будут возвращены. • У него будет три параметра – массив целых чисел, размер массива и значение, которое он будет искать в массиве. • Он будет искать в массиве и подсчитывать, сколько раз значение было найдено. • Затем он либо распечатает, сколько раз значение было найдено, либо что значение не было найдено. @Дими - person kidbone222; 12.04.2016
comment
Затем поместите System.out.println() в свой метод searchArray, потому что иначе вы не сможете получить доступ к локальной переменной count. - person Dimitrios Begnis; 12.04.2016
comment
Но вы также можете вернуть count, как я сделал в своем ответе, тогда вы можете проверить if (count == 1), чтобы это означало, что массив не содержит число, которое вы ищете, потому что первый элемент всегда является числом, которое вы ищете. - person Dimitrios Begnis; 12.04.2016
comment
@Dimi... Я не совсем понимаю, что вы имеете в виду, поэтому сделайте так: public int searchArray(int[] randomNumbers,int numSearch) { int count = 0; for(int i : randomNumbers) { if (i == numSearch) { count++; int numSearch = searchArray (числа, числа [0]); System.out.println(Один # был найден: + numSearch+ раз); - person kidbone222; 12.04.2016
comment
Вы вернули count в конце метода searchArray? Тогда он должен работать правильно. - person Dimitrios Begnis; 12.04.2016

@Dimi Так что-то вроде этого:

public int searchArray (int [] randomNumbers, int numSearch) { int count = 0;

    for(int i : randomNumbers) {
        if (i == numSearch) {
            count++;
        }
    }
  int numSearch = searchArray(numbers, numbers[0]);
        System.out.println("Single # was found: "+ numSearch+" times");
person kidbone222    schedule 12.04.2016