我有2d数组的输入值,大小为5乘2。 我在一列上出现了每个数字。 和另一栏上的每个数字
我找到了出现次数的最大值,需要移动到2d数组中值左边的单元格,根据出现次数打印number的值。 任何帮助都会很棒!
我的代码:
import java.util.Collections;
import java.util.Scanner;
import java.util.Arrays;
import java.util.List;
public class Code {
public static void main(String[] args) {
int num1, num2, num3, num4, num5, sum, avg, max, min;
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the first number:");
num1 = keyboard.nextInt();
System.out.println("Enter the seond number:");
num2 = keyboard.nextInt();
System.out.println("Enter the third number:");
num3 = keyboard.nextInt();
System.out.println("Enter the fourth number:");
num4 = keyboard.nextInt();
System.out.println("Enter the fifth number:");
num5 = keyboard.nextInt();
keyboard.close();
int[] num = new int[5]; // array named num is declared with 5 variables
num[0] = num1;
num[1] = num2;
num[2] = num3;
num[3] = num4;
num[4] = num5;
Arrays.sort(num);
int n1 = num[0];
int n2 = num[1];
int n3 = num[2];
int n4 = num[3];
int n5 = num[4];
List<Integer> index1 = Arrays.asList(n1, n2, n3, n4, n5);
int occurrences1 = Collections.frequency(index1, n1);
List<Integer> index2 = Arrays.asList(n1, n2, n3, n4, n5);
int occurrences2 = Collections.frequency(index2, n2);
List<Integer> index3 = Arrays.asList(n1, n2, n3, n4, n5);
int occurrences3 = Collections.frequency(index3, n3);
List<Integer> index4 = Arrays.asList(n1, n2, n3, n4, n5);
int occurrences4 = Collections.frequency(index4, n4);
List<Integer> index5 = Arrays.asList(n1, n2, n3, n4, n5);
int occurrences5 = Collections.frequency(index5, n5);
int[][] nums = new int[5][2];
nums[0][0] = n1;
nums[1][0] = n2;
nums[2][0] = n3;
nums[3][0] = n4;
nums[4][0] = n5;
nums[0][1] = occurrences1;
nums[1][1] = occurrences2;
nums[2][1] = occurrences3;
nums[3][1] = occurrences4;
nums[4][1] = occurrences5;
int maxOccurrences = Math.max(Math.max(Math.max(Math.max(occurrences1, occurrences2), occurrences3), occurrences4), occurrences5);
System.out.println(maxOccurrences);
sum = (int) (num1 + num2 + num3 + num4 + num5);
avg = (int) (sum / 5);
max = Math.max(Math.max(Math.max(Math.max(num1, num2), num3), num4), num5);
min = Math.min(Math.min(Math.min(Math.min(num1, num2), num3), num4), num5);
System.out.println(" ");
System.out.println("Sum:" + sum);
System.out.println("Avg:" + avg);
System.out.println("Max:" + max);
System.out.println("Min:" + min);
System.out.println("Median:" + num[2]);
System.out.println("Mode:" + min);
}
}
答案 0 :(得分:1)
我认为2D数组不是您想要实现的最优雅的数据结构。看起来TreeMap在这里可能是合适的,但这只是猜测。
无论如何,阅读这些资源:
想象一下,您必须扩展当前代码以支持超过5个输入值!
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Occurances
{
public static void main(String[] args)
{
int numNums = 5;
int[][] num = new int[numNums][2];
Scanner keyboard = new Scanner(System.in);
for (int i=0; i<numNums; i++)
{
System.out.println("Enter the "+i+"th number:");
num[i][0] = keyboard.nextInt();
//num[i][0] = (i*i)%numNums;
//System.out.println("Number "+i+" is "+num[i][0]);
}
keyboard.close();
sort(num, 0);
int maxOccurrences = -1;
for (int i=0; i<numNums; i++)
{
num[i][1] = computeFrequency(num[i][0], num, 0);
maxOccurrences = Math.max(maxOccurrences, num[i][1]);
}
System.out.println("maxOccurrences "+maxOccurrences);
int sum = computeSum(num, 0);
int avg = sum / numNums;
int max = computeMax(num, 0);
int min = computeMin(num, 0);
System.out.println(" ");
System.out.println("Sum:" + sum);
System.out.println("Avg:" + avg);
System.out.println("Max:" + max);
System.out.println("Min:" + min);
System.out.println("Median:" + num[numNums/2][0]);
System.out.println("Mode:" + min);
}
private static int computeSum(int array[][], int column)
{
int sum = 0;
for (int i=0; i<array.length; i++)
{
sum += array[i][column];
}
return sum;
}
private static int computeMin(int array[][], int column)
{
int min = Integer.MAX_VALUE;
for (int i=0; i<array.length; i++)
{
min = Math.min(min, array[i][column]);
}
return min;
}
private static int computeMax(int array[][], int column)
{
int max = Integer.MIN_VALUE;
for (int i=0; i<array.length; i++)
{
max = Math.max(max, array[i][column]);
}
return max;
}
private static void sort(int array[][], final int column)
{
Arrays.sort(array, new Comparator<int[]>()
{
@Override
public int compare(int[] a0, int[] a1)
{
return Integer.compare(a0[column], a1[column]);
}
});
}
private static int computeFrequency(int value, int array[][], int column)
{
int count = 0;
for (int i=0; i<array.length; i++)
{
if (array[i][column] == value)
{
count++;
}
}
return count;
}
}