2012-01-26 42 views
0

我正在學習Java,現在正在使用數組。我正在做一個練習,我要讓用戶輸入一個兩乘三整數數組的值。那麼我應該找到最小的價值。我通過使用if語句來做到這一點。問題是編譯器總是爲最小值打印數字「0」。我找不到我的代碼有什麼問題。誰能幫幫我嗎? 的代碼如下:在數組中尋找最小的數據

import java.util.Scanner; 
    public class Oppgave79k 
    { 
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 
    int t[][] = new int[2][3]; 
    int smallest = t[0][0]; 

    for (int row = 0; row < t.length; row++) 
     { 
     for (int column = 0; column < t[row].length; column++) 
      { 
      System.out.println("Enter values for array: "); 
      t[row][column] = input.nextInt(); 
      if (t[row][column] < smallest) 
       { 
       smallest = t[row][column]; 
       } 
      } 
     } 
    for (int row = 0; row < t.length; row++) 
     { 
     for (int column = 0; column < t[row].length; column++) 
      { 
      System.out.printf("%d ", t[row][column]); 
      } 
     } 
    System.out.printf("Smallest element is: %d\n", smallest); 
} 

}

+0

爲什麼不使用['Arrays.sort'](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort%28int []%29)並抓取排序數組中的第一個元素? – mre

+1

什麼是C#的角度? – spender

+0

@mre:這是O(nlogn)而不是O(n)。它也修改陣列,除非你做一個副本。 – Brian

回答

8

在這些線路:

int t[][] = new int[2][3]; 
int smallest = t[0][0]; 

smallest起步爲0。所以,除非你輸入一個負數,它永遠不會改變。

你可以使用:

int t[][] = new int[2][3]; 
int smallest = Integer.MAX_VALUE; 

,以確保第一個數字進入使用。

順便說一句,你的縮進風格有點不合常規。無論是

for (...) { 
    // Code 
} 

for (...) 
{ 
    // Code 
} 

看沒什麼問題,但

for (...) 
    { 
    // Code 
    } 

是非常不尋常的。

2

你的smallest初始值爲0。如果您在通過輸入輸入負數,你應該得到不同的值大於0

考慮最小設定爲第一輸入值。

0

如果你正在學習Java或其他編程語言

  1. 瞭解如何調試代碼,這將幫助您瞭解電腦如何「思考」
  2. 如果你在開始的時候,嘗試解決這個問題沒有寫出任何一行代碼,這會幫助你像「電腦」一樣思考

然後你會看到你的初始任務smallest是錯誤的。

0

我建議你先做輸入讀取部分並存儲2D數組。然後你可以設置最小= t [0] [0]。然後它算法永遠不會中斷。而且我建議你爲此實現一個排序算法,而不是找到最小的元素。我可以保證這將是一次非常棒的體驗。 也可以使用eclipse IDE這是一個開源的IDE。你可以調試你的觀點,它會讓你的編碼生活變得簡單。