如标题所述,我正在尝试从int类型的方法(int模式(int[]a
)返回多个整数。该方法旨在接受整数数组并确定模式。另一个问题是int[]a
索引中的每个值的范围为1-3。我无法创建对象、其他方法来处理部分解决方案或导入任何帮助我的东西。
我遇到的问题是如果数组中有多个模式
即int[]array={1,2,2,3,3,4,5,6}
如您所见,在本例中有两种模式,分别是2和3,我不知道如何从一个方法返回多个整数。
这是我教授的指示“
“编写方法int mode(int[]a)。此函数采用一个数组a的索引范围从1到a.Length。a的每个单元格都包含1、2或3。您的函数返回数组a中最常出现的值(1,2,3)。您应该不使用任何导入(即Math,arraylists等)或更改返回类型。假设main只包含一个数组,然后调用main中使用上述数组的mode方法。下面是模板:”
int模式(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));
输出:3
虽然三是部分正确的,因为有多个模式,在这种情况下,我希望的输出是
所需输出:2 3
在mode方法中,我只是为1-3创建一个计数器,看看每一个在数组中出现的次数。然后我设置条件来检查哪一个是最大的。我试图创建条件来检查它们是否相等,但是这不会起作用,因为我必须返回两个整数。我只是完全迷失了。如有任何帮助,我们将不胜感激。
int模式(int[]a){
}
考虑到您关于无法使用数组列表或导入其他库的更新,我创建了一个用于计算出现次数的自定义类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;
}
}
结果:
现在我希望以泛型的方式使用这些类。 如何从方法“method1”和“method2”返回泛型类型(可以是猫或狗)。我有几个返回“T extends Animal”的方法,所以最好在方法级别或类级别中声明泛型类型。
问题内容: 我想从Java方法返回两个对象,并且想知道这样做的好方法是什么? 我能想到的可能的方法是:回报HashMap(因为这两个对象是相关的),或者返回的对象。 更准确地说,我要返回的两个对象是(a)对象和(b)相同名称的逗号分隔。 我想从一个方法返回这两个对象,因为我不想遍历对象列表以获得逗号分隔的名称(我可以在此方法的同一循环中执行此操作)。 不知何故,返回a 看起来不是很优雅的方式。 问
问题内容: 我如何使用类型提示来注释一个返回总是返回两个值的函数:a和a ?提示很接近,除了将返回值类型限制为元组,而不是生成器或其他可迭代类型。 我主要是好奇的,因为我想注释一个用于返回多个值的函数,如下所示: 通常函数喜欢做这样的事情(它返回一个元组),但我喜欢的类型暗示要足够灵活,以取代发电机或列表或别的东西返回的元组。 问题答案: 您总是返回 一个 对象;使用只需返回一个元组。 是的,完全
这是我的场景,我有三节课。 这里translate方法返回动物对象,但我需要使用相同的方法返回狗和猫类型,而不需要进行类型转换。我知道我必须在这里使用泛型,但是我如何编辑translate方法来支持泛型,这样我就可以将类类型传递给它的参数,如果使用Cat参数调用它就返回Cat对象,如果使用动物参数调用它就返回动物对象,如果使用Dog参数调用它就返回Dog对象。 例如:-而不是 Cat newCat
我在做一个数组右旋转的basic程序,对于基本条件,我想用退出函数。但是,它会给出类型无效的错误。 有人能解释为什么会这样吗?
我正在实现我自己的泛型链表类,它有一个名为的实例方法,该方法生成链表的数组副本并返回它。然而,每当我试图在实例上调用该方法时,我总是得到错误消息“sllist.this cannot be referenced from a static context”。我搜索了一下,有些人说这是因为我没有在实例上调用那个方法,但我确实调用了。 下面是类: 它有一些方法,如,它们都没有问题。 是我不断收到错误消