2011-10-30 2 views
1

단어의 문자 발생 횟수를 출력하는 프로그램을 만들고 싶습니다. Basicaly 출력은 다음과 같이한다 :단어의 문자 계산

import java.util.Scanner; 

public class LetterOccurence 
{ 
    public static void main(String[]args) 
    { 
    Scanner input=new Scanner(System.in); 
    String word; 
    String letter; 

    int letterNumber; 

    boolean [] alphabet = new boolean [27]; 

    System.out.println("Please enter a word- "); 
    word=input.next(); 

    System.out.println("The word "+ word + " has " + word.length() + " letters\n"); 

    String lower = word.toLowerCase(); 

    for(letterNumber=0;letterNumber<lower.length();letterNumber++) 
     { 
      alphabet[lower.charAt(letterNumber) - 'a'] = true; 
     } 

    //do 
    //{ 
    System.out.println("What letter would you like to guess? (enter 0 to quit) "); 
    letter = input.next(); 

    if (alphabet[letter.charAt(0)-'a'] = true) 
     { 
     System.out.printf("There are %s's\n",letter.charAt(0)); 
     } 
    else 
     { 
     System.out.printf("There are 0 %s's\n",letter.charAt(0)); 
     } 

    //}while(Character.isLetter(letter.charAt(0))); 
    } 
} 

지금 붙어 오전에 어떤 아이디어가 어떻게 계속 :

Please enter a word—howdy 
The word howdy has five characters. 
What letter would you like to guess? (enter zero to quit) a 
There are 0 A’s. 
What letter would you like to guess? (enter zero to quit) b 
There are 0 B’s. 

이것은 내가 지금까지 가지고 무엇인가?

+0

당신은 당신이 그래, 아주 가까이 보인다 – Lithium

+0

에 붙어있는 어떤 언급해야한다, 무슨 일이 당신에게 문제를주고? –

+0

당신은 무엇에 붙어 있습니까? – Kev

답변

1

주석이 달린 do/while에있는 if 문은 (비교) 대신 = (할당)을 사용하고 있습니다.

당신이 정말로해야 할 일은 추측 당 하나의 계수를 유지하고, 0으로 초기화하고, 추측 된 문자를 만날 때마다 증가시켜야합니다.

추측하기 전에 "앞쪽으로"모든 작업을 수행하려는 경우 부울지도가 실제로 필요하지 않습니다. 정수로 된지도 (소문자 당 하나, 0으로 초기화 됨)가 필요합니다. 해당 문자가 추측 될 때마다 증가합니다.

아주 가까이 있습니다.

2

처음으로 booleantrue 또는 false 값만 보유하고 있기 때문에 계산할 수 없습니다. 특정 문자로 매핑되는 배열의 각 요소를 루프 설정에 true으로 설정하는 대신 카운터를 단순히 증가시킬 수 있습니다.

이 경우 boolean이 아니라 int이 필요합니다. 그리고 특정 문자에 대한 어커런스의 양을 출력하려면 배열의 특정 색인에 int 값을 인쇄하면됩니다.

어레이의 특정 char에 대한 색인을 계산하는 대신, Map<Character,Integer>을 사용할 수도 있습니다.

편집 : Dave가 언급했듯이 if 문도 손상되었습니다.

1

alphabet에 대한 부울 배열을 원하지 않습니다. 단어에 표시되는 글자는 표시되지만 각 글자 수는 표시되지 않습니다. 이 대신에보십시오 :

boolean [] alphabet = new boolean [27]; 
for(letterNumber=0;letterNumber<lower.length();letterNumber++) 
{ 
    ++alphabet[lower.charAt(letterNumber) - 'a']; 
} 

을 그리고 나중에 :

System.out.printf("There are %d %s's\n",alphabet[letter.charAt(0) - 'a'], letter.charAt(0)); 
+0

두 번째 예제의 if 문은 불필요한 것처럼 보입니다. 첫 번째 인쇄문 인 한 줄을 붙이지 않는 이유는 무엇입니까? – AusCBloke

+0

예. 'if'가 필요 없습니다. 배열은 int []이어야하며 루프는 char c : lower.toCharArray()가 될 수 있습니다. – aishwarya

+0

@AusCBloke - 좋은 지적입니다. 그에 따라 코드를 변경했습니다. 나는 OP에서 'if'가 무엇을하고 있는지 보지 않았다. –

관련 문제