2

ユーザーが入力した名前を読み取り、最長の名前 (最も多くの文字を含む名前) を出力する、longestName という名前の静的メソッドを作成しようとしています。

最長の名前は、ユーザーが名前を入力するときに使用した大文字と小文字に関係なく、最初の文字を大文字にし、その後のすべての文字を小文字にして印刷する必要があります。2 つ以上の名前の間で最長が同点の場合は、最も早く入力された同点の名前を使用します。また、下の右のログのように、同点だったことを示すメッセージを出力します。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();
    }

}

私の出力は次のとおりです。

名前を入力 #1:ロイ
名前を入力 #2:DANE
名前を入力 #3:エリック
名前を入力 #4:sTeFaNiE
名前を入力 #5:LaurA
ステファニーの名前が一番長い
 (同点でした!)

呼び出しごとに引き分けがあったと表示されるだけです。理由はわかりません。第二に、

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

友達がこれを使って単語を検索する方法を教えてくれましたが、まだ理解できません。他の方法はありますか?それは私にとって非常に複雑です。

4

3 に答える 3