从最小到最大的数量差异 - Java阵列

时间:2013-06-03 15:39:07

标签: java arrays

我需要一些关于Arrays的帮助我正在尝试创建一个简单的程序,它可以获得与数组中最大数字的最小数字差异,但看起来我正在做的循环并没有达到目的。例如:int [] numbers = {2,5,7,32} ...输出必须为“30”,因为2是最小的,32是最大的数字,它们的差别是“30”。这是我的代码。

public static void main(String[] args) {

   int[] value   = {5,16,3,32};

    int diff = 0;
    int highest = 0;

   for (int i = 0; i<value.length; i++)
   {
       for(int y = 0;y<value.length;y++)
       {            
           diff = value[i] - value[y];

           if(diff > highest){
               highest = diff;

               System.out.println("the difference of the lowest and the highest is "+ diff);
           }    
       }  
   } 

} }

请帮助,我还在学习技巧和东西。谢谢:))

8 个答案:

答案 0 :(得分:3)

您需要记录最小值和最大值,然后计算差值;更重要的是,只需要一个循环:

public static void main(String[] args) {

    int[] value   = {5,16,3,32};
    // Guarantee sane initial min/max
    int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;


    for (final int val: value) {
        if (val < min)
            min = val;
        if (val > max)
            max = val;
    }

    System.out.println("diff is " + (max - min));
}

这里的“技巧”(如果这可以称为技巧)当然是minmax的初始值。

注意:此处存在溢出风险。留下来作为如何避免它的练习!

答案 1 :(得分:1)

试试这个,并注意以下内容:

  1. 您只想在'for'循环结束时打印最大差异。这样,您只会打印最大值
  2. 如果您只是查看差异的绝对值并且只检查每对元素一次(注意'j = i + 1'和'Math.abs(...)'行),您可以执行较少的比较
  3. 我将'y'改为'j',因为'i / j'在Java中更具惯用性。
  4. 以下是代码:

       int[] value   = {5,16,3,32,6};
    
       int diff = 0;
       int highest = 0;
    
       for (int i = 0; i < value.length; i++)
       {
           for(int j = i+1; j < value.length; j++)
           {            
               diff = Math.abs(value[i] - value[j]);
    
               if (diff > highest) {
                   highest = diff;
               }    
           }  
       }
       System.out.println("the difference of the lowest and the highest is "+ highest);
    

答案 2 :(得分:1)

你可以使用lambdaj(website - download),这个库非常强大,可用于管理集合,下面的代码非常简单并且工作正常:

import static ch.lambdaj.Lambda.*;
public class Test {

    public static void main(String[] args) {
        Integer[] values   = {5,16,2,32};

        int minValue = min(values, on(Integer.class));
        int maxValue = max(values, on(Integer.class));
        System.out.print("Rtn:" + (maxValue - minValue)); //Print 30
    }

}

使用此库,您可以在一行中解决您的问题。你必须添加到你的项目lambdaj-2.4.jar希望这有助于服务。

答案 3 :(得分:0)

您不需要使用两个循环,因为您只遍历一维数组。另外,如果将println语句放在循环中,它将打印多次,这是你想要的吗?如果不把它放在最后。请尝试以下方法:

int min=value[0];
int max=value[0];
int diff=0;

for(int i=0; i < value.length; i++)
{
    if(value[i]<min)
        min=value[i];
    if(value[i]>max)
        max=value[i];
}
diff = max-min;
System.out.println("The difference of the lowest and the highest is "+diff);

答案 4 :(得分:0)

请参阅以下内容。我们可以在o(n);

中完成
public static void main(String[] args) {
 int[] value   = {5,16,3,32};
 int lowest = 2147483647;
 int highest = 0;
 int diff = 0;
 for (int i = 0; i<value.length; i++)
 {
   if(value[i] < lowest){
     lowest = value[i];
   }
   if(value[i] > highest){
     highest = value[i];
   }
  } 
  diff = highest-lowest;
  system.out.println("The difference is "+ diff);
}   

答案 5 :(得分:0)

如果数组尚未排序,则必须执行此类操作:

  1. 从数组中查找最小和最大的数字。
  2. 从最大的减去最小的。
  3. 如果数组已排序:

    1. 从array.length-1
    2. 中减去0索引

答案 6 :(得分:0)

//find the difference between shortest no and largest no//
import java.util.*;
class main15
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the no of elements");
        int no=sc.nextInt();
        int i;
        int a[]=new int[no];
        System.out.println("Enter the elements");
        for(i=0;i<no;i++)
        {
            a[i]=sc.nextInt();
        }
        Arrays.sort(a);
        int x=a[0];
        int y=a[a.length-1];
        System.out.println("Difference is="+(y-x));
    }
}

答案 7 :(得分:-1)

您可以使用Arrays.sort轻松排序数组。然后第一个元素是最小的,最后一个是最大的:

int[] value= {5,16,3,32,6};
Arrays.sort(value);
int min = value[0];
int max = value[value.length-1];
int dif = max-min;