2014-04-19 6 views
0

명령 줄을 통해 3 자리 숫자를 입력 한 작은 코드를 작성한 다음 코드에 5가 얼마나 많은지 감지합니다. I는 실제 번호 I 입력 동일하게 [η]의 각 값을 위해 input.charAt (I)에있어서 후 -48 기간을 필요로하는 이유특정 디지트 감지기 문제

public class fivedet { 

    public static void main (String[] args) { 
     String input = args[0]; 
    int[] a = {0,0,0}; 
    int x = 0; 
    int y = 0; 
    int z = 0; 
    for(int i = 0; i<input.length();i++) { 
     a[i] = input.charAt(i) - 48; 
    } 
    if(a[0]==5) { 
     x=5; 
    } 

    if(a[1]==5) { 
     y=5; 
    } 

    if(a[2]==5) { 
     z=5; 
    } 

    System.out.println("5 digits here:" + x + y + z); 
} 
} 

내 주요 문제이다. 예를 들어

제가 자바 505 을 fivedet A는 [] = {53,48,53}를 A는 [] = {5,0,5} 및 I 불행히도 경험하고 있지 않다 대신 -48 배열없이 입력 왜 이런 일이 일어나는지 이해하기 위해 코딩 자바 (3 달 전에 학습하기 시작)로 충분합니다.

또한 다른 숫자와 입력 길이의 다른 길이를 감지 할 수 있도록 개발하고 싶습니다.

왜 이런 일이 발생했는지에 대한 통찰력을 얻었습니다.

답변

2

48을 빼는 것은 문자에서 정수로 변환하는 빠르고 간단한 방법입니다. 각 숫자의 문자 코드는 숫자 값에서 48이 떨어진다.

이 부분은 table of ASCII values을 참조하십시오. (자바는 ASCII가 아닌 유니 코드를 사용합니다 - 문자열은 내부적으로 UTF-16입니다. 그러나 값은이 특별한 경우에 유효합니다). 따라서 '0'문자의 값은 48입니다. 캐릭터가 '9'값을 가지고 57

다음, input의 1 문자 문자열을 2, 1 "2"를 "1"로 변환, 해당 문자열에 Integer.parseInt()를 호출하는 것이 일을하는 또 다른 방법,

0

문자를 감지하기 위해 int로 변환 할 필요가 없습니다. 문자로만 계산하십시오.

for (char i : args[0].toCharArray()) { 
     System.out.print(i == '5' ? i : '0'); 

    } 

또한 this question 문자열

에서 문자의 발생을 계산하는 좋은 답이있다