2017-02-07 29 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

請讓我知道如果這個代碼,如果有效還是無效? –