我试图找到用户提交到程序中的所有整数的出现,到目前为止这是我得到的。它有效,但我不认为这是一种合法的方式,我有没有办法在不使用list[10]=9999;
的情况下尝试这样做?因为如果我不这样做,它将显示出边界错误。
import java.util.*;
public class OccurrencesCount
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int[] list = new int[11];
//Accepting input.
System.out.print("Enter 10 integers between 1 and 100: ");
for(int i = 0;i<10;i++){
list[i] = scan.nextInt();
list[10] = 9999;
}
//Sort out the array.
Arrays.sort(list);
int count = 1;
for(int i = 1;i<11;i++){
if(list[i-1]==list[i]){
count++;
}
else{
if(count<=1){
System.out.println(list[i-1] + " occurs 1 time.");
}
else{
System.out.println(list[i-1] + " occurrs " + count + " times.");
count = 1;
}
}
}
}
}
答案 0 :(得分:0)
import java.util.*;
class OccurrencesCount {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] list = new int[101];
System.out.print("Enter 10 integers between 1 and 100: ");
for(int i = 0;i<10;i++) {
int x = scan.nextInt();
list[x]++;
}
for(int i = 1; i <= 100; i++)
if(list[i] != 0)
System.out.println(i + " occurs " + list[i] + " times ");
}
}
要存储从1到100的数字计数,您需要使用100个整数的列表,每个整数存储自身的出现次数。更好的方法是使用Map。
答案 1 :(得分:0)
就个人而言,我认为这是一个非常好的解决方案。这意味着您可以像处理所有其他组一样处理最后一组。我要做的唯一改变是将行list[10] = 9999;
放在for
循环之外(没有理由这样做10次)。
但是,如果要使用长度为10的数组,可以更改行
if(list[i-1]==list[i])
到
if(i < 10 && list[i-1]==list[i])
如果您执行此操作,则不会从ArrayIndexOutOfBoundsException
获得list[i]
,因为在&&
时未评估i == 10
之后的表达式。
答案 2 :(得分:0)
如果感兴趣的话,我已经使用了ArrayList和Collections包而不是常规数组作为一种不同的味道。
import java.util.*;
public class OccurrencesCount {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
//Accepting input.
System.out.print("Enter 10 integers between 1 and 100: ");
for (int i = 0; i < 10; i++) {
list.add(scan.nextInt());
}
Collections.sort(list);
Integer prevNumber = null;
for (int number : list) {
if (prevNumber == null || prevNumber != number) {
int count = Collections.frequency(list, number);
System.out.println(number + " occurs " + count + (count > 1 ? " times." : " time."));
}
prevNumber = number;
}
}
}
答案 3 :(得分:0)
我弄明白了,只是改变了条件内的几件小东西,一切顺利!谢谢您的帮助!现在我只需要找到一种限制输入超过100的方法。
import java.util.*;
public class CountOccurrences
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int[] list = new int[10];
//Accepting input.
System.out.print("Enter 10 integers between 1 and 100: ");
for(int i = 0;i<=9;i++){
list[i] = scan.nextInt();
}
//Sort out the array.
Arrays.sort(list);
int count = 1;
for(int i = 1;i<=10;i++){
if(i<=9 && list[i-1]==list[i]){
count++;
}
else{
if(count<=1){
System.out.println(list[i-1] + " occurs 1 time.");
}
else{
System.out.println(list[i-1] + " occurrs " + count + " times.");
count = 1;
}
}
}
}
}