2013-04-23 3 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(); 
    } 

} 

내 출력은 다음과 같습니다 그것은 단지 모든 invokation.I의 넥타이가 있었다 인쇄됩니다

 
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!) 

이유를 모르겠어요. 둘째 ,

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

내 친구는 단어를 검색하려면이 옵션을 사용하도록 가르쳐하지만 난 여전히 understand.Is 그것을하는 다른 방법을 해달라고? 그것은 나를 위해 매우 복잡하다.

답변

2

논리에 문제가 있습니다. 새로운 가장 긴 이름 (처음으로 if 문)을 발견하면 longestname으로 설정합니다. 그런 다음 두 번째 if이 실행됩니다. 이 시점에서 longestname과 동일한 객체를 참조하기 때문에 물론 길이가 동일합니다. 이를 방지하려면 else을 삽입하기 만하면됩니다.

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

어떻게 첫 문자 대문자로 변경했는지, 소문자로 바꾸 었는지 분석해 보겠습니다.

longest = longest.toLowerCase(); 

이제 longest은 모두 소문자입니다.

Character.toUpperCase (longest.charAt(0)) 

이것은 첫 번째 문자를 취해 대문자로 사용합니다.

longest.substring(1); 

이것은 대문자로 문자와 연결되는 문자열의 끝 인덱스 1 내지합니다 ( 문자)에서 시작 문자열 걸린다.

+0

고마워요. 이해했습니다! – user2179615

+0

나는 캐릭터가 어떻게 작동하는지에 익숙하지 않다. 코드에서 나온 캐릭터,이 경우에는 첫 글자가 맞다. 아파를 더 잘 이해하려고 노력했다. 캐릭터 아래있다. 유니크 블록? – user2179615

+0

아니요, 'longest.charAt (0)'은 첫 번째 문자를 나타냅니다. static 메소드'Character.toUpperCase'는'char'을 취해 대문자'char'를 리턴합니다. 연결하면 Java는 연결하기 전에 대문자로 된'char'을'String'으로 변환 할만큼 똑똑합니다. – rgettman

관련 문제