Java 在if语句中检查来自数组的两个返回值

Java 在if语句中检查来自数组的两个返回值,java,arrays,if-statement,icons,Java,Arrays,If Statement,Icons,我的数组包含随机数,以下方法成功返回其中最大的两个值: int[] a = {a1 = (int) ((Math.random() * 10) + 1), a2 = (int) ((Math.random() * 10) + 1), a3 = (int) ((Math.random() * 10) + 1)}; public static int[] showtwolargestints(int a[]) { // returns two largest integers of my a

我的数组包含随机数,以下方法成功返回其中最大的两个值:

 int[] a = {a1 = (int) ((Math.random() * 10) + 1), a2 = (int) ((Math.random() * 10) + 1), a3 = (int) ((Math.random() * 10) + 1)};

public static int[] showtwolargestints(int a[]) {   // returns two largest integers of my array
int largestA = Integer.MIN_VALUE, largestB = Integer.MIN_VALUE;
for(int value : a) {
  if(value > largestA) {
    largestB = largestA;
    largestA = value;
  } else if (value > largestB) {
    largestB = value;
  }
}
return new int[] { largestA, largestB };
}

我现在想做的是,在按下GUI中的一个按钮后,我想显示某些标签/图片,这取决于我的两个最大整数是什么。 由于我是一名初学者,我并不知道比较它们的好方法: 这是我在GUI类/JButton方法中的代码:

public void buttonmethod() {   
try {                         
  if (Arrays.toString(myobject.showtwolargestints(myobject.a)).equals("[10, 10]")) {
    label1.setVisible(true);
    Icon i1 = new ImageIcon("pics/ten.png");
    label1.setIcon(i6);

    label2.setVisible(true);
    Icon i2 = new ImageIcon("pics/ten.png");
    label2.setIcon(i7);
  } // end of if
  else if (Arrays.toString(myobject.showtwolargestints(myobjects.a)).equals("[10, 9]")) {
     label1.setVisible(true); // and so on...
我确实得到了结果,但它们似乎不能正常工作,因为在按下按钮后,每隔几次启动我的程序,
它要么只显示一个标签,要么根本没有变化:l

使用
toString
进行操作效率低下(特别是如果重复计算最大元素数组及其字符串表示形式),而且笨重

只需直接比较数组元素:

int[] twoLargest = myobject.showtwolargestints(myobject.a);
if (twoLargest[0] == 10 && twoLargest[1] == 10) {
  // ...
} else if (twoLargest[0] == 10 && twoLargest[1] == 9) {
  // ...
}

但看起来您可以通过将文件名放入数组来简化代码:

String[] filenames = {"pics/zero.png", ... "pics/ten.png"};
然后说:

label1.setVisible(true);
Icon i1 = new ImageIcon(filenames[twoLargest[0]]);
label1.setIcon(i1);

label2.setVisible(true);
Icon i2 = new ImageIcon(filenames[twoLargest[1]]);
label1.setIcon(i2);

直接比较它们对我来说很有效

是否有一种干净的方法将数组中的其余整数相加?我的程序似乎对我的尝试不太满意

我尝试的是:

int sum = 0;
  for( int i : maxis) {
    sum += i;
  }

这些图标称为
i1
i2
,但您将
i6
i7
设置为图标。打字错误?1。将返回的数组存储在变量中,以避免多次计算最大值。2.只需使用
if(array[0]==10&&array[1]==10)
来比较元素(或者更好,将其放在一个可重用的方法中,将数组和要比较的两个vlue作为参数)。3.使用调试器了解发生了什么。我们不知道您预期会发生什么,相反会发生什么,以及数组包含什么,因此我们无法提供帮助。但是你的调试器可以。在我看来,第二部分是你真正想要做的。然而,如果你说你想检查返回的数组时是认真的,你可以做
Arrays.equals(Twomaxist,new int[]{10,10})
等等。这不是最优雅的,但我认为它反映了你想要的,这对读者来说总是很好的。请问“直接比较它们”是什么意思<代码>arr1==arr2<代码>arr1.等于(arr2)?这两种方法都不起作用(除非
arr1
arr2
引用同一数组)。对于后续问题,您应该问一个新问题。再解释一下。