1

我需要一些有关数组的帮助我正在尝试创建一个简单的程序,该程序将获得最小数字与数组上最大数字的差异,但似乎我正在做的循环并没有达到目标。例如: 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);
           }    
       }  
   } 

} }

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

4

8 回答 8

4

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

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));
}

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

注意:这里有溢出的风险。留下作为如何避免它的练习!

于 2013-06-03T15:49:07.417 回答
1

试试这个,并注意以下几点:

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

这是代码:

   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);
于 2013-06-03T15:49:25.853 回答
1

你可以使用 lambdaj (网站-下载),这个库对于管理集合非常强大,以下代码非常简单并且完美运行:

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 添加到您的项目中,希望对您有所帮助。

于 2013-06-03T16:05:02.003 回答
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);
于 2013-06-03T15:45:51.243 回答
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);
}   
于 2013-06-03T15:46:00.113 回答
0

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

  1. 从数组中找出最小和最大的数。
  2. 用最大的减去最小的。

如果数组已排序:

  1. 从 array.length-1 中减去 0 索引
于 2013-06-03T15:59:17.060 回答
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));
    }
}
于 2019-06-11T02:26:39.710 回答
-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;
于 2013-06-03T15:50:01.910 回答