2016-10-21 5 views
0

여러분이 이것을 해결할 수 있는지 확인하십시오. 필자는 Java에서 title caps 프로그램을 작성했습니다.이 프로그램은 ASCII 문자 열을 가져 와서 모든 단어 (A-Z 또는 a-z 문자로만 구성된 하위 문자열)를 대문자로 사용할 수있는 프로그램입니다. 따라서 "# @hello! _world $"문자열은 "# @Hello! _World $"이됩니다. 그러나이 프로그램은 그것을 교정하기위한 최선의 노력에도 불구하고 문자열의 첫 번째 색인에서 비 문자를 올바르게 번역하는 것을 거부합니다. if (i == 0 && (!isUpperCase(str.charAt(i)))) { - 그것이 소문자의 가정TitleCaps 프로그램은 문자열의 첫 번째 문자를 올바르게 변환하지 않습니다 (이유는 무엇입니까?)

public static String LetterCapitalize(String str) { 

    String newStr = ""; 
    System.out.println(newStr); 

    for (int i = 0; i < str.length(); i++) { 

     // if first character is a letter and not uppercase 
     if (i == 0 && (!isUpperCase(str.charAt(i)))) { 
      Character m = (char) ((int) str.charAt(i) - 32); 
      newStr = newStr + m; 
     } // if first character is a letter and uppercase 
     else if (i == 0 && (isUpperCase(str.charAt(i)))) { 
      Character m = str.charAt(i); 
      newStr = newStr + m; 
     } // if first character is not a letter 
     else if (i == 0 && (!isLetter(str.charAt(i)))) { 
      Character m = str.charAt(i); 
      newStr = newStr + m + m; 
     } // if character is first letter in a word 
     else if (!isLetter(str.charAt(i - 1)) && isLetter(str.charAt(i)) && !isUpperCase(str.charAt(i))) { 
      Character m = (char) ((int) str.charAt(i) - 32); 
      newStr = newStr + m; 
     } // all other 
     else { 
      Character m = str.charAt(i); 
      newStr = newStr + m; 
     } 
    } 

    return newStr; 

} 
public static boolean isUpperCase(char c) { 
    boolean isCap; 

    if (c >= 'A' && c <= 'Z') { 
     isCap = true; 
    } else { 
     isCap = false; 
    } 

    return isCap; 
} 
public static boolean isLetter(char c) { 
    boolean isLetter; 

    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { 
     isLetter = true; 
    } else { 
     isLetter = false; 
    } 

    return isLetter; 
} 
+0

입력의 예와 출력으로 얻고 자하는 결과 및 실제로 얻는 것 (잘못된 것)을 제공 할 수 있습니까? –

+0

위의 예에서 "# @ Hello! _World $"를 반환 할 것으로 예상하여 "# @ hello! _world $"를 입력합니다. 그러나 실제로이 프로그램은 "□ @ Hello! _World $"를 반환합니다. 분명히 이것은 출력 문자열에 대한 잘못된 첫 번째 문자입니다. –

+0

이 줄이 잘못되었습니다. if (i == 0 && (! isUpperCase (str.charAt (i)))) {- 소문자로 가정합니다. 소문자인지 확인해야합니다. 대문자가 아닌 모든 문자가 글자는 아닙니다. –

답변

0

이 라인은 잘못된 것입니다. 소문자인지 확인해야합니다. 대문자가 아닌 모든 문자가 글자는 아닙니다. 그래서 당신은 어떤 것을 가지고 있어야합니다.

if (i==0 && isLetter() && !isUpperCase()) 

다른 방법으로는 첫 번째로 오는 편지인지 확인해야합니다.