2013-03-07 4 views
4

이 프로그램은 사용자가 입력 한 문자 수를 계산합니다. 다른 문자는!, @, $ 등과 같이 다른 문자가 어디에 있습니까? #을 계산하지 않아야합니다. 다음은이를 수행하는 코드입니다."Character Count Java Program"에 문제가 있습니다.

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

     char sym; 
     int up = 0; 
     int low = 0; 
     int digit = 0; 
     int other = 0; 

     System.out.print("Enter a character # to quit: "); 
     sym = input.next().charAt(0); 

     while (sym != '#') { 
      System.out.print("Enter a character # to quit: "); 

      if (sym >= 'a' && sym <= 'z') { 
       low++; 
      } 
      if (sym >= 'A' && sym <= 'Z') { 
       up++; 
      } 
      if (sym >= '0' && sym <= '9') { 
       digit++; 
      } 
      if (sym >= '!' && sym <= '=') { 
       other++; 
      } 

      sym = input.next().charAt(0); 

     } 

     System.out.printf("Number of lowercase letters: %d\n", low); 
     System.out.printf("Number of uppercase letters: %d\n", up); 
     System.out.printf("Number of digits: %d\n", digit); 
     System.out.printf("Number of other characters: %d\n", other); 
    } 
} 

"other"카운터에 문제가 있습니다. !, @ 및 $를 입력하면 입력 된 3 자 중 2자가 계산됩니다. 뭐가 잘못 됐어?

답변

1

이 시도

 } else if ("%!$&".contains(sym)){ 
      other++; 
     } 
+0

이 일! 고맙습니다! – user1858350

+0

당신은 환영합니다 :) 설명을 추가하려면 – CsBalazsHungary

+0

: 특수 기호는 "!"의 ASCII 범위에서 제외 될 수 있습니다. 및 "=" – CsBalazsHungary

0

당신은 사용해야합니다 OR (||) 대신 조건 AND (& &)

if (sym == '!' || sym == '=' || sym == '@' || ...){ 
     other++; 
} 
1

이되지 않습니다

else { 
    other++; 
} 

대신

if (sym >= '!' && sym <= '=') { 
    other++; 
} 

#으로 시도 이미 필터링했기 때문에 other으로 계산됩니다. while 상태입니다.

3

ascii 테이블을 보면 다음과 같이 표시됩니다.
'!' = 33
'='= 61
'@'= 64

'@'문자는 당신이 계산되지, 그래서 함께 마지막 조건을 대체 지정된 범위에 있지 :

if (sym >= '!' && sym <= '@') {...} 
0

"기타 모든 것"을 잡으십시오. 당신은 단지 else 절을 사용합니다. 당신이 지금하고있는 것처럼 당신이 놓치지 않는 방법 ('@'이 당신이 검사하는 범위에 없기 때문에). 당신이 원하는 : 현재이이

else { 
    other++; 
} 

가 :

if (sym >= '!' && sym <= '=') { 
    other++; 
} 
0

당신은 ASCII 값을 기준으로 문자를 비교합니다. @ ASCII는 64 입니다! ASCII는 33입니다. = ASCII는 61

입니다. 따라서 @는 "!"사이에 있지 않습니다. 및 "="귀하의 카운터를 증가하지 않습니다.

0

여기를 보시고, 답변을 해보시겠습니까?

http://en.wikipedia.org/wiki/UTF-8

그리고 당신은 순서 $, 5, $는 당신에게 정답을 줄 것이다 확신? 당신이 그 캐릭터가 할 수있는 일의 짧은 세트를 선택할 수있는 다른 대신

 if (sym >= 'a' && sym <= 'z') { 
      low++; 
     } else if (sym >= 'A' && sym <= 'Z') { 
      up++; 
     } else if (sym >= '0' && sym <= '9') { 
      digit++; 
     } else { 
      other++; 
     } 

또는 :;)

관련 문제