Я пишу программу, которая подсчитывает количество вхождений целых чисел, введенных в массив, например, если вы введете 1 1 1 1 2 1 3 5 2 3, программа распечатает различные числа, за которыми следуют их вхождения, например:
1 встречается 5 раз, 2 встречается 2 раза, 3 встречается 2 раза, 5 встречается 1 раз.
И это почти закончено, за исключением одной проблемы, которую я не могу понять:
import java.util.Scanner;
import java.util.Arrays;
public class CountOccurrences
{
public static void main (String [] args)
{
Scanner scan = new Scanner (System.in);
final int MAX_NUM = 10;
final int MAX_VALUE = 100;
int [] numList;
int num;
int numCount;
int [] occurrences;
int count[];
String end;
numList = new int [MAX_NUM];
occurrences = new int [MAX_NUM];
count = new int [MAX_NUM];
do
{
System.out.print ("Enter 10 integers between 1 and 100: ");
for (num = 0; num < MAX_NUM; num++)
{
numList[num] = scan.nextInt();
}
Arrays.sort(numList);
count = occurrences (numList);
System.out.println();
for (num = 0; num < MAX_NUM; num++)
{
if (num == 0)
{
if (count[num] <= 1)
System.out.println (numList[num] + " occurs " + count[num] + " time");
if (count[num] > 1)
System.out.println (numList[num] + " occurs " + count[num] + " times");
}
if (num > 0 && numList[num] != numList[num - 1])
{
if (count[num] <= 1)
System.out.println (numList[num] + " occurs " + count[num] + " time");
if (count[num] > 1)
System.out.println (numList[num] + " occurs " + count[num] + " times");
}
}
System.out.print ("\nContinue? <y/n> ");
end = scan.next();
} while (!end.equalsIgnoreCase("n"));
}
public static int [] occurrences (int [] list)
{
final int MAX_VALUE = 100;
int num;
int [] countNum = new int [MAX_VALUE];
int [] counts = new int [MAX_VALUE];
for (num = 0; num < list.length; num++)
{
counts[num] = countNum[list[num]] += 1;
}
return counts;
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что независимо от текущего значения для «num», «count» выводит только 1, и проблема не в методе, который подсчитывает вхождения, потому что когда вы вводите числа вместо переменной значение меняется.
Есть ли способ изменить это, чтобы он правильно распечатывал вхождения, или я должен попробовать что-то еще? И чем проще решение, тем лучше, так как я еще не прошел мимо одномерных массивов.
Спасибо за помощь!
counts[num] = countNum[list[num]] += 1;
не делает того, что вы думаете. Он перемещается по массиву, помещая количество чисел в отдельные индексы. Пример с вашим текущим вводом, массивcounts
имеет значение[1, 2, 3, 4, 5, 1, 2, 1, 2, 1, ... 0]
. первый[1, 2, 3, 4, 5
связан с тем, что в вашем массиве есть 5 отсчетов1
, следующий1, 2
связан с тем, что в вашем массиве есть 2 отсчета2
и т. д. Вам нужно переписать свою функциюoccurrences
. Оставил бы это как ответ, но вопрос был закрыт. - person Shadow   schedule 01.11.2015