2014-07-11 31 views
-3

在Java中的我自学的数量最多,我想从每个2个阵列获得数量最多的充分利用各2列

我不知道为什么下面的输出被执行:

Largest: 3 
Largest: 8 
Largest: 9 
Largest: 23 
Largest: 33 
Largest: 41 
Largest: 51 

正确的输出应该是:

Largest: 23 
Largest: 51 

下面的代码如何能得到最多?因为(getLargest1[i] > largest)

等于getLargest1[i] > 0,其中largest = 0

为什么要largest = getLargest1[i];


public class MyProgram 
{ 
    public void start() 
    { 
     int[] getLargest1 = {3, 8, 4, 9, 5, 5, 23, 14}; 
     int[] getLargest2 = {33, 23, 41, 9, 17, 51, 23, 45}; 
     getLargestFunc(getLargest1, getLargest2); 
    } 

    private void getLargestFunc(int[] getLargest1, int[] getLargest2) 
    { 
     int largest = 0; 

     for (int i = 0; i < getLargest1.length; i++) 
     { 
      if (getLargest1[i] > largest) 
      { 
       largest = getLargest1[i]; 
       System.out.println("Largest: " + largest); 
      } 
     } 

     for (int i = 0; i < getLargest2.length; i++) 
     { 
      if (getLargest2[i] > largest) 
      { 
       largest = getLargest2[i]; 
       System.out.println("Largest: " + largest); 
      } 
     } 
    } 
} 
+1

将您的'print' stmt移到for循环之外。 – Ambrish

+0

在for循环后移动每个打印语句,并且在第一个循环后将“最大”变量重置为“0”# – BackSlash

+0

@ BackSlash或每个阵列的第一个元素 –

回答

2

你必须移动for环路外的

System.out.println("Largest: " + largest); 

语句。喜欢的东西:

for (int i = 0; i < getLargest2.length; i++) 
{ 
    if (getLargest2[i] > largest) 
    { 
     largest = getLargest2[i]; 
     } 
} 
System.out.println("Largest: " + largest); 

当然,largest变量的第一个循环后复位。

+0

谢谢@BackSlash。补充说。 :) –

3

可以这样做太

int[] getLargest1 = {3, 8, 4, 9, 5, 5, 23, 14}; 
    int[] getLargest2 = {33, 23, 41, 9, 17, 51, 23, 45}; 
    Arrays.sort(getLargest1); 
    Arrays.sort(getLargest2); 

System.out.println("Largest values " + getLargest1[getLargest1.length-1] 
            +" and "+getLargest2[getLargest2.length-1]); 

输出:

Largest values 23 and 51 
0
for (int i = 0; i < getLargest1.length; i++) 
{ 
    if (getLargest1[i] > largest) 
    { 
     largest = getLargest1[i]; 
    } 
} 

System.out.println("Largest: " + largest); 

print的说法应该是圈外的,或者你只是通过在所有的变化迭代最大。这就是为什么它会给你带来奇怪的输出。


我只是做一个方法,可以用于这两个数组。这使得更有用的方法。

public void start() 
{ 
    int[] getLargest1 = {3, 8, 4, 9, 5, 5, 23, 14}; 
    int[] getLargest2 = {33, 23, 41, 9, 17, 51, 23, 45}; 
    System.out.println(getLargestFunc(getLargest1)); 
    System.out.println(getLargestFunc(getLargest2)); 
} 

private int getLargestFunc(int[] array){ 
    if(array == null) return null; 
    largest = array[0]; 
    for(int i = 0; i < array.length; i++){ 
     if(array[i] > largest){ 
      largest = array[i]; 
     } 
    } 
    return largest; 
} 
0

你在错误的地方打印您应该打印您的循环之外:

for (int i = 0; i < getLargest1.length; i++) 
     { 
      if (getLargest1[i] > largest) 
      { 
       largest = getLargest1[i]; 

      } 
     } 
     System.out.println("Largest: " + largest); 

     largest = 0; 

     for (int i = 0; i < getLargest2.length; i++) 
     { 
      if (getLargest2[i] > largest) 
      { 
       largest = getLargest2[i]; 
      } 
     } 

     System.out.println("Largest: " + largest); 
0

我认为你必须把循环操作以外的println系统..

+0

'最大'也需要重置。 – Unihedron

0

另一种方式是 - ArrayUtils(org.apache.commons.lang3.ArrayUtils)和Collections

int[] getLargest1 = {3, 8, 4, 9, 5, 5, 23, 14}; 
    int[] getLargest2 = {33, 23, 41, 9, 17, 51, 23, 45}; 


    List a = Arrays.asList(ArrayUtils.toObject(getLargest1)); 
    System.out.println("Largest :"+Collections.max(a)); 

    List b = Arrays.asList(ArrayUtils.toObject(getLargest2)); 
    System.out.println("Largest :"+Collections.max(b)); 
+0

它给出'[I @ 5483cd'没有'ArrayUtils.toObject(arr)'而不是'23' –

0

尝试(未测试):

final int largest1 = IntStream.of(getLargest1).max().getAsInt(); 
final int largest2 = IntStream.of(getLargest2).max().getAsInt(); 

return largest1 >= largest2 ? largest1 : largest2;