2015-04-14 30 views
-5
public class Phone { 
    public static void main(String args[]) { 

     String numbers[][] = { { "Tom", "555-3322" }, { "Mary", " 555-8976" }, 
       { "Jon", "555-1037" }, { "Rachel", "555-1400" } }; 

     int i; 

     if (args.length != 1) 
      System.out.println("Usage: java Phone <name>"); 
     else { 
      for (i = 0; i < numbers.length; i++) { 
       if (numbers[i][0].equals(args[0])) { 
        System.out.println(numbers[i][0] + ": " + numbers[i][1]); 
        break; 
       } 
       if (i == numbers.length) 
        ; 
       System.out.println("Name not found."); 
      } 
     } 
    } 
} 

因此,在我運行這些代碼行之後,除了第一個sysout語句之外,我沒有得到任何其他結果。我不能讓這個程序運行,因爲我想

+3

預期結果是什麼? – Voldemort

+0

你不是指'if(numbers.length!= 1)'? – JLewkovich

+0

'args.length'可能不等於1. – WonderWorld

回答

1

你的代碼中有一些錯誤。從

用法:java的手機

它看起來像args陣列的預期內容應該是"Phone"<name>這兩種元素,因此

if(args.length != 1) 

無效狀態。你或許應該用

if (args.length < 2) 

其它問題代替它的是,<name>args陣列存儲在args[1]所以

if(numbers[i][0].equals(args[0])) 

應該是第二個元素

if(numbers[i][0].equals(args[1])) //we want to compare name, not "Phone" string 

最後問題涉及

if (i == numbers.length); 
    System.out.println("Name not found."); 
  • 在for循環i絕不會只等於number.length因爲for (i = 0; i < numbers.length; i++)循環迭代如果i<number.length。所以,這種情況下應與

    if (i == numbers.length -1) 
    
  • 有分號更換右後這個條件表示空指令,這意味着

    if (i == numbers.length - 1); 
        System.out.println("Name not found."); 
    

    基本上是一樣的

    if (i == numbers.length - 1) 
        ; 
    System.out.println("Name not found."); 
    

    這意味着System.out.println("Name not found.");的執行不取決於if條件的結果。

    爲了解決這個問題簡單地刪除該附加;,並避免此問題總是圍繞應該依賴的ifelseforwhile內部塊{...}代碼。

+0

我已按照你的步驟,但我繼續像開始 – Pingu

+0

你可以發佈在http://pastebin.com/您當前的代碼和共享鏈接?另外你怎麼試圖運行它? – Pshemo

+0

我已經提出了你所說的話,但是就像開始時不會推出任何電話號碼一樣。我想我沒有運行好的參數。 – Pingu

0

您可能正在運行此java代碼而未指定參數。
例如。 java的手機會給輸出用法:java的手機
但是,如果你有一個參數運行它,你一定會有一個輸出。
例如。 java的手機湯姆會給輸出湯姆:555-3322

0

代碼中有兩個小錯誤。一是你沒有使用括號中if代碼

if(i == numbers.length); 
    System.out.println("Name not found."); 

這裏的問題相關的事實是不容易被發現。在if語句之後有一個分號,這意味着if語句沒有代碼塊,並且總是執行System.out.println

第二個問題是您檢查i == numbers.length。這在你的for-loop裏從來都不是真的,因爲數組索引是從零開始的。意味着當你有四個條目時,最高索引是三個。所以這種情況永遠不會是真的。

您應該修正這樣的代碼。

if(i == numbers.length-1) { 
    System.out.println("Name not found."); 
} 
相關問題