2013-04-23 45 views
1

我正在嘗試編寫一個名爲longestName的靜態方法,它讀取用戶鍵入的名稱並打印出最長的名稱(包含最多字符的名稱)。查找最長的名字

無論用戶輸入姓名時使用的大寫字母,最長的名稱都應該用大寫的第一個字母和後面的所有小寫字母打印。如果在兩個或更多名稱之間存在最長的聯繫,請使用最早鍵入的聯繫名稱。還打印一條消息,說明存在一條平行線,如下面的正確日誌。 如果一些短名稱的長度較長,如DANE和Erik;但不要打印郵件,除非該聯繫在最長的名字之間。

public static void longestName(Scanner console, int n) { 

    String name = ""; 
    String longest= ""; 
    boolean areTies = false; 
    for(int i=1; i<=n; i++) { 
     System.out.print("Enter name #" + i + ":"); 
     name = console.next(); 
     if(name.length() > longest.length()) { 

      longest = name; 
      areTies = false; 
     } 
     if(name.length() == longest.length()) { 
      areTies = true; 

     } 
    } 
    // now change name to all lower case, then change the first letter 
    longest = longest.toLowerCase(); 
    longest = Character.toUpperCase (longest.charAt(0)) + longest.substring(1); 

    System.out.println(longest + "'s name is longest"); 
    if(areTies==true) { 
     System.out.println(" (There was a tie!) "); 
    }else{ 
     System.out.println(); 
    } 

} 

我的輸出是:

 
Enter name #1:roy 
Enter name #2:DANE 
Enter name #3:Erik 
Enter name #4:sTeFaNiE 
Enter name #5:LaurA 
Stefanie's name is longest 
(There was a tie!) 

將只打印有每一個invokation.I領帶不知道爲什麼。 其次,

longest = longest.toLowerCase(); 
longest = Character.toUpperCase (longest.charAt(0)) + longest.substring(1); 

我的朋友教我用這個檢索詞,但我仍然不understand.Is有這樣做的其他方式?這對我來說是非常複雜的。

回答

2

你的邏輯有問題。當您找到新的最長名稱(第一個if聲明)時,您將longest設置爲name。然後執行第二個if。因爲此時longest指的是與name相同的對象,當然它們的長度是相等的。爲了避免這種情況,只需插入一個else

else if(name.length() == longest.length()) { 

讓我們來分解它是如何變成第一個字符的大寫字母,其餘的是小寫字母。

longest = longest.toLowerCase(); 

現在longest都是小寫字母。

Character.toUpperCase (longest.charAt(0)) 

這需要第一個字符和大寫字母它。

longest.substring(1); 

這需要的子開始於索引1(字符)通過串,它的值與大寫的字符的結束。

+0

非常感謝。我明白了! – user2179615 2013-04-23 22:38:40

+0

我並不真正熟悉角色的工作方式。因此,從你的代碼中,角色在這種情況下,是指第一個字母是正確的?試圖尋找API來更好地理解它。是否在Character.UnicodeBlock下? – user2179615 2013-04-23 22:42:53

+0

不,'longest.charAt(0)'指的是第一個字符。靜態方法'Character.toUpperCase'接受'char'並返回大寫的'char'。串聯時,Java足夠聰明,可以在連接之前將大寫'char'變成'String'。 – rgettman 2013-04-23 22:45:41

相關問題