正如标题所述,我试图从int(int mode(int [] a
)类型的方法返回多个整数。该方法旨在获取整数数组并确定模式是什么。另一个问题是,int [] a
索引中的每个值都在1-3之间。我无法创建对象,其他方法来处理部分解决方案或导入任何东西来帮助我。
我遇到的问题是数组中有多种模式
即。 int [] array = {1,2,2,3,3,4,5,6}
正如您所看到的,在这种情况下有两种模式是2和3,我无法弄清楚如何从一种方法返回多个整数。
这是我的教授说明"
"编写方法int模式(int [] a)。此函数采用从1到a.length的索引数组。 a的每个单元格包含1,2或3.您的函数返回在数组a中最常出现的值(1,2,3)。您不应使用任何导入(即数学,arraylists等)或更改返回类型。假设main只包含一个数组,然后使用main中的上述数组调用mode方法。这是模板:"
int mode(int [] a){
}
这是我的代码:
public static int mode(int [] a){
int value = 0;
int countOne= 0;
int countTwo = 0;
int countThr = 0;
for(int i =0;i<a.length;i++){
int count = 0;
for(int j=i+1;j<a.length;j++){
if(a[i] == a[j]){
if(a[i] == 1){
countOne++;
}
if(a[i] == 2){
countTwo++;
}
if(a[i] == 3){
countThr++;
}
}
}
}
if(countOne > countTwo && countOne > countThr)
value = countOne;
if(countTwo > countOne && countTwo > countThr){
value = countTwo;
}
if(countThr > countOne && countThr > countTwo){
value = countThr;
}
/* if(countThr == countTwo){
return countThr, countTwo;
if(countOne == countTwo){
//return countOne, countTwo;
if(countOne == countThree){
return countOne, countThree;
*/
return value;
`
main{
int [] a = {1,2,2,3,3};
System.out.println(modeTwo(a));
Output:
3
虽然三个部分正确,但由于在这种情况下有多种模式,我想要的输出是
Desired Output:
2 3
在模式方法中,我只是创建一个1-3的计数器,以查看数组中每次出现的次数。然后我设置条件来检查哪个是最大的。我试图创造条件来检查它们是否相等,但是由于我必须返回两个整数,所以它不会起作用。我完全迷失了。任何帮助将不胜感激。
int mode(int [] a){
}
答案 0 :(得分:2)
所以你需要做的就是进行除法和修正操作,以便在你的回报中提取个别数字。
例如:
“所需的输出: 2 3“
您的方法将返回23.要在“ones”列中提取任何内容,请执行num%10。要提取2,请将数字除以10:num / 10 = secondDigit。如果您有一个三位数字,请将其除以100。
这是你提取数字的方法。我将把它留给你来构建3位数的返回值。
答案 1 :(得分:1)
鉴于您无法使用ArrayLists或导入其他库的更新,我创建了一个自定义类来计算出现次数Modes
,并且我只使用数组来计算每个数字的最大出现次数,但只返回int[]
中的数字,其出现次数等于最大出现次数。
这是我能想到的,它将计算数组中每个数字的所有出现次数并返回具有最大出现次数的每个数字,这与模式相同。
public static void main(String eth[]) {
int[] numbers = new int[] {1, 2, 2, 3, 3, 4, 4, 5, 5, 10, 12, 33};
int[] modes = mode(numbers);
for (int i = 0; i < modes.length; i++) {
if (modes[i] == -999) { // Stop printing once you reach the first sentinal value
continue;
}
System.out.println(modes[i]);
}
}
private static int[] mode(int[] numbers) {
Modes[] modes = new Modes[numbers.length];
int modesIndex = 0;
int maxOccurrence = 0;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == -999) {
continue;
}
int number = numbers[i];
numbers[i] = -999; // -999 is a sentinel value
int count = 1;
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[j] == -999) {
continue;
}
if (numbers[j] == number) {
numbers[j] = -999;
count++;
}
}
if (count > maxOccurrence) {
maxOccurrence = count;
}
modes[modesIndex++] = new Modes(number, count);
}
int[] result = new int[numbers.length];
for (int i = 0; i < result.length; i++) {
result[i] = -999; // Sentinel value
}
int index = 0;
for (int i = 0; i < modes.length; i++) {
if (modes[i] == null) {
break; // Stop when you hit the first null
}
if (modes[i].Occurrences == maxOccurrence) {
result[index] = modes[i].Number;
index++;
}
}
return result;
}
public static class Modes {
public int Number;
public int Occurrences;
public Modes(int number, int occurrences) {
Number = number;
Occurrences = occurrences;
}
}
结果: