我正在努力解决Java中的问题,这是我的任务的一部分。问题如下:
用户在屏幕提示时逐个输入十个数字。然后屏幕将所有不同的值分配给一个数组和一个类似的数组,以保持这些数字出现次数的频率。
我已完成以下工作,但似乎我被困在某个地方为数组分配频率和不同的值:
import java.util.*;
public class JavaApplication10
{
public static void main(String[] args)
{
int [] numbers = new int [10];
int [] count = new int[10];
int [] distinct = new int[10];
for (int k=0;k<10;k++)
{
count[k]=0;
distinct[k]=0;
}
java.util.Scanner input = new java.util.Scanner(System.in);
System.out.print("Enter number 0: ");
numbers[0]=input.nextInt();
count[0]=1;
distinct[0]=numbers[0];
int j=0;
for (int i = 1;i<10;i++)
{
System.out.print("Enter number "+i+": ");
numbers[i]=input.nextInt();
while(j<i)
{
if (distinct[j]==numbers[i])
count[j]=count[j]+1;
else
distinct[j+1]=numbers[i];
j++;
}
}
for (int k=0;k<10;k++)
{
System.out.println(distinct[k]+ " "+count[k]);
}
}
}
我知道要求别人帮我解决问题是不公平的。但任何类型的提示都会有所帮助。 谢谢
答案 0 :(得分:1)
数字是否限制在0-9?如果是这样,我会很简单地完成任务。
(请注意您将输入分配给名为“input”的变量):
数[0] =输入; 计数[输入] ++;
此外,您可以在“0”中启动for循环,以避免在for循环之前进行分配。
只是一个提示。
希望这有帮助!
答案 1 :(得分:0)
理想的数据结构是HashMap
步骤: 1)初始化一个数组来存储数字和每个输入
2)检查带有密钥作为输入数字的hashmap条目是否已存在
3)如果存在则只增加其计数
4)否则使用key创建新条目作为数字并计为1
所以最后你的频率会被计算出来 如果你被迫使用2个阵列
1)初始化两个数组
2)对于每个输入循环数字数组并检查该数字是否已经在数组中
3)如果是这样的话,取数组索引并用相同的索引增加频率数组的值
4)如果不是freq [index] = 1
答案 2 :(得分:0)
这样做的正确方法是:
public Map<Integer, Integer> getFrequencies(Iterable<Integer> numbers) {
Map<Integer, Integer> frequencies = new HashMap<Integer, Integer>();
for(Integer number : numbers) {
if (frequencies.get(number) == null) {
frequencies.put(number, 0);
}
frequencies.put(number, frequencies.get(number) + 1);
}
return frequencies;
}
返回地图number -> frequency
。
数组不是是Java的一种方式,应尽可能避免使用它们。请参阅Effective Java, Item 25: Prefer lists to arrays。
答案 3 :(得分:0)
我删除了Scanner对象以更快地编写代码,只需将其替换为上面的代码即可。它可以正常工作。
int[] numbers = { 1, 2, 2, 2, 3, 3, 3, 1, 1, 2 };
int[] count = new int[10];
int[] distinct = new int[10];
count[0] = 1;
distinct[0] = numbers[0];
int disPos = 1; //Current possition in the distinct array
boolean valueInarray = false;
for (int i = 1; i < 10; i++) {
valueInarray = false;
for (int d = 0; d < i; d++) {
if (numbers[i] == distinct[d]) {
count[d] = count[d] + 1;
valueInarray = true;
break;
}
}
if (!valueInarray) {
distinct[disPos] = numbers[i];
count[disPos] = 1;
disPos++;
}
}
答案 4 :(得分:0)
如果你绝对必须使用数组..这是一种方法...
import java.util.Scanner;
import java.util.Arrays;
public class JavaApplication10
{
public static void main(String[] args)
{
int [] numbers = new int [10];
int [] count = new int[10];
int [] distinct = new int[10];
int [] distinct1 = new int[1];
int distinctCount = 0;
boolean found = false;
Scanner input = new Scanner(System.in);
for (int i=0; i<10; i++) {
found = false;
System.out.print("Enter number " + i);
numbers[i]=input.nextInt(); //Add input to numbers array
for (int j=0; j<=distinctCount; j++)
{
if (distinct1[j] == numbers[i]){ // check to see if the number is already in the distinct array
count[j] = count[j] + 1; // Increase count by 1
found = true;
break;
}
}
if (!found) {
distinct[distinctCount] = numbers[i];
count[distinctCount] = 1;
distinctCount++;
distinct1 = Arrays.copyOf(distinct, distinctCount+1);
}
}
for (int j=0; j<distinctCount; j++)
System.out.println("The number " + distinct1[j] + " occurs " + count[j] + " times" );
}
}
答案 5 :(得分:0)
我认为这就是你需要的,如果我错了,请纠正我......
import java.util.HashMap;
import java.util.Scanner;
public class JavaApplication10 {
public static void main(String[] args) {
// Initializing variables
int[] numbers = new int[10];
HashMap<Integer, Integer> table = new HashMap<Integer, Integer>();
Scanner input = new Scanner(System.in);
// Getting the 10 inputs
for(int x=0; x<10; x++) {
// Asking for input
System.out.println("Enter number "+x+":");
numbers[x]=input.nextInt();
// If the table contains the number, add 1
// Otherwise: set value to 1
if(table.containsKey(numbers[x]))
table.put(numbers[x], table.get(numbers[x])+1);
else
table.put(numbers[x],1);
}
// Closing the reader
input.close();
// Get the highest and smallest number
int highest=0;
int smallest=0;
for(int i:table.keySet()) {
if(i>highest)
highest=i;
if(i<smallest)
smallest=i;
}
// For every value between the smallest and the highest
for (int x=smallest; x<=highest; x++) {
// Check if the frequency > 0, else continue
if(table.get(x)==null)
continue;
// Output
System.out.println(x+" is "+table.get(x)+" times in \'frequence\'");
}
}
}
与其他代码不同,这也处理负数。如果您不想使用HashMaps,请告诉我,以便我可以使用数组创建内容。
让我知道它(不是)是否有效!
快乐的编码(祝你的任务好运);)-Charlie