我需要一些关于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);
}
}
}
} }
请帮助,我还在学习技巧和东西。谢谢:))
答案 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));
}
这里的“技巧”(如果这可以称为技巧)当然是min
和max
的初始值。
注意:此处存在溢出风险。留下来作为如何避免它的练习!
答案 1 :(得分:1)
试试这个,并注意以下内容:
以下是代码:
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)
如果数组尚未排序,则必须执行此类操作:
如果数组已排序:
答案 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;