System.in.read ()를 입력하라는 메시지가 표시되지 않고 생략됩니다

mcfadizzle :

나는 면접의 종류 코드를 썼다. 그것은 당신의 성이 얼마나 당신이 과거와 무엇을 요구합니다. 이 두 번째 질문을 출력 후 어떤 이유로 한 .exe가 종료됩니다. 왜 그런 겁니까? 어떻게 그것을 해결할 수 있습니까?

나는 구문을 확인하지만 실수를 찾을 수 없습니다.

수입 때 java.io.IOException;

공용 클래스 Abfrage {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    char Geschlecht;
    System.out.println("Wie ist dein Geschlecht? M oder W?");
    Geschlecht = (char) System.in.read();

    int Alter;
    System.out.println("Wie ist dein Alter?");
    Alter = (int) System.in.read();
    if (Alter >= 18 && Alter <= 100)
    {
        System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
    }
}

}

그것은 ( "알터 데인 위 인도 표준시?")이 문자열을 출력하고 그 후에 종료됩니다. 나는 문제가 println 메소드에 질문입니다 (수) 내 나이에 넣어 수 없습니다.

나는 내 나이에 넣어 수 있도록 기대, 그리고 18에서 100 사이의 나는 경우가 말해해야한다 "성인 인에 축하를." (그것의 더 많은 경우가 있습니다 / 다른 완료되지 않음)

편집 : 내가 만약 다른 문을 추가했습니다. 나는 .EXE를 실행하면 :

    if (Alter >= 18 && Alter <= 100)
    {
        System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
    }
    else if (Alter >= 0 && Alter <= 17);
    {
        System.out.println("Du bist leider minderjaehrig mein Kind");
    }

내가 이런 짓을 할 때, 그냥 질문 후 다른 경우에 println "두 BIST leider minderjaehrig 소바 종류"출력한다 "알터 데인 위 경악을?". 그것은 그 후 종료됩니다.

Zabuza :

설명

당신은 가능성이 입력 보다 한 문자보다.

당신은 예를 들어 클릭 M남성을위한뿐만 아니라이 공격 버튼을 입력합니다 . 실제 입력은

M\n

뿐 아니라

M

첫 번째는 read를 읽고 M두 번째는을 읽는 동안 \n여전히 있기 때문에, 새로운 입력을 요청하지 않고 읽지 입력 떠났다 .

그래서 Alter는 IS int의 값 \n문자 및 따라서 귀하의 if블록이 입력되지 않습니다. 그래서 코드가 완벽하게 실행.


해결책

쉬운 등의 입력 독서의 목적을 위해 완전히 개발 된 편리한 클래스가있다 Scanner( 문서 ).

Scanner scanner = new Scanner(System.in);
System.out.println("Wie ist dein Geschlecht? M oder W?");
String geschlecht = scanner.nextLine();

System.out.println("Wie ist dein Alter?");
int alter = Integer.parseInt(scanner.nextLine());
if (alter >= 18 && alter <= 100) {
    System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
}

노트

자바 명명 규칙은 말한다주의 CamelCase를 변수 이름,하지 않는 PascalCase가 . 그래서 당신 GeschlechtAlter오히려 호출해야 geschlecht하고 alter.

또한, 당신은 당신이 그들을 필요가 없으며 이전의 정확한 위치에 당신의 변수를 만들어야합니다. 그래서 대신

char geschlecht;
System.out.println("Wie ist dein Geschlecht? M oder W?");
geschlecht = ...

취하다

System.out.println("Wie ist dein Geschlecht? M oder W?");
char geschlecht = ...

즉 읽기 쉬운 코드를 만들 것입니다.

운영 체제에 따라, 개행 문자는하지 않을 \n뿐만 아니라 수 있습니다 \n\r. 이 물건을 직접 처리 할 수 매우 성가신, Scanner당신을 위해이 모든 것을 할 것입니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=196678&siteId=1