2017-02-07 116 views
0

我是新的java数组,我想在数组包含负数元素时计算数组中的小元素。为什么对于[0]而不是-1输出为0?

class test_array { 
    //test_array class 
    public static void main(String args[]) { 
     int[] a = {4, 2, 99, 9, -1, 0};   
     int small = a[0]; 

     for (int i = 1; i < a.length; i++) {          
      if(a[i]<small) {      
       a[0]=a[i];       
       a[i]=small; 
      } 
     } 

     System.out.println(a[0]);  
    } 
} 
+0

尝试'if(a [i] Guy

+0

@Shiv_k有找到从阵列最小vatious方式。你的做法是基于偏移最小的0指数,我已经包含在你我的回答方式,也告诉一个替代的解决方案,希望这会有所帮助。 http://stackoverflow.com/a/42082621/504133 –

回答

1
int small = a[0]; 

在这里你给4小

如果你找到一个较小的一个,你没有改变此值。取而代之的是,你正在将更小的值更改为此值

a[i] = small; 

此代码和小值根本不会改变。你的“小”值总是4.

当它比较一个[5]和小(它意味着0和4)它通过if语句并且使得[0] = a [5](给出'0' )。

您只是将此数组的第一个字符与此algoryhtm进行比较,但您需要将其与动态“小”值进行比较。改变那样的代码。

class test_array { 
//test_array class 

    public static void main(String args[]) 
    { 
      int[] a={4,2,99,9,-1,0};   
      int small=a[0]; 

     for (int i=1;i<a.length;i++)    
     {          
      if(a[i]<small) 
      {            
       small=a[i]; 
      } 
     } 

     System.out.println(small);  
    } 
}  

选择第一个数组元素为小,然后比较。如果有较小的值,则将此值设为“小”。在所有数组的循环中执行并找到最小值。

奖励:顺便说一下它的好,简单algorythms这样的工作开始,但知道,困难时期也更容易排序数组和找到分钟和像

Arrays.sort(arr); 

这将排序所有数组最大值方式。那么arr [0]将是min,arr [arr.lenght-1]将是最大值。

+1

这将是更好,如果我们使用的内置功能,可以降低行,如果代码会相比,这种方法要快得多 –

0

您很困惑您是否想将最小元素保留在变量“small”或数组的第0个元素中。你正在改变一个[0],但比较小。

1

虽然有多种方法可以从数组中找到最小的元素,但让我们专注于您的方法。你的方法在第0个索引处带来最小的元素。你不需要变量small,你还需要修改if条件中的代码,如下所示。

if(a[i]<a[0]){      
     int temp = a[i]; 
     a[i] = a[0]; 
     a[0] = temp;      
} 

以上将移动第0个索引处的最小元素。其他方法只需在获取变量中的数组的同时继续分配较小的元素,并在循环执行完成后,可以使用最小的元素。如果您只想知道最小的元素,这种替代方法更有效,因为它不涉及元素的移位。此方法由@ReadyFreddy提供 https://stackoverflow.com/a/42082585/504133

0

您的代码正在打印最后一个被比较的元素。

迭代1

i =1 
a[1]=2 
small =4 
a[1]<small -> a[0] =2 a[1] -> 4 

迭代2

i =2 
a[2]=99 
small =4 
a[2]<small // False 

迭代3

i =3 
a[3]=9 
small =4 
a[3]<small // False 

迭代4

​​

迭代5

i =5 
a[5]=0 
small =4 
a[5]<small -> a[0] =0 a[5] -> 4 

在最后一次迭代a[0]会变为0,当你打印外循环会显示0

如果您正在寻找找到数组中的最小元素请参考Find the smallest element in an array.

希望这有助于。

0

我只是尝试不同的东西,希望这是更简单的比较,发现在阵列中的最小元素。

public static void main(String args[]) { 
     int[] a = { 4, 2, 99, 1, -2, 0 }; 
     Arrays.sort(a); 
     System.out.println(a[0]); 
    } 
+0

请让我知道如果这个代码,如果有效还是无效? –