자바 스캐너 사용법을 틀리면 (노트)
Java version : 12.0.1
코드 설명:텍스트 편집기(Atom)
OS 사용하기: 윈도우즈 (문자 코드 문제일 뿐 Mac도 시작됨)
문제의 경과: 자바 초보자가 배운 내용으로 무엇을 하려다가 코드를 직접 짰는데 오류가 발생했다
발생한 문제, 오류 메시지
사운드를 내는 문제는 스캔너 레벨을 사용해 특정 입력 키 이외의 입력 키를 입력한 경우(이번에는 1 또는 2를 입력해야 함) 다시 입력하는 프로그램만 있으면 된다는 것이다.
우선 기능만 생각해서 조립해 봤어요.
errorFile.java
Scanner sc = new Scanner().nextInt();
while(sc){
switch(sc){
case 1:
// 処理1
break;
case 2:
// 処理2
break;
default:
// 処理3
break;
}
}
알고 싶지만, 당연히 운영하지 않겠습니다.이 점에서 나는 많은 것을 이해했다. 정말 잘못 이해했다.어쨌든 잘 몰라도 운전해 보세요. 잘못이 있으면 수시로 조사하고 잘못을 해결하는 게 재미있어요!이런 생각을 갖고 얕은 이해를 갖고 나온 결과다.
오해의 내용
이때 자신이 생각하는 이유를 설명한다.입력 오류의 해결 방법을 간단하게 보고 싶으신 분들은 코드에 대한 설명이 있기 전에 저에게 알려주세요.나는 이곳이 뱀발이라고 생각한다.
이때 오해한 내용에 관해서는 주로 다음과 같은 내용이 있다
0while () 의 () 안은 순환 조건
→ 실제 순환, () 내의 조건이 가짜로 변할 때까지
○ Scanner 클래스에 대한 Scanner 변수 이름 = new Scanner().나는 넥스트가 일종의 형식이라고 생각한다
→ 실제 실례화와 입력 요소 가져오기는 서로 다른 기능
즉, new Scanner() 및 입니다.nextInt () 분리 가능
원래 이 말은 Scanner에서 int형을 얻으면 불필요한 오류가 발생할 수 있다
예외 처리 이해 없음
→이렇게 하면 숫자 입력에만 대응하고 문자열에 입력한 경우 예외가 발생하여 순조롭게 실행할 수 없다
해결 후에도 예외 처리의 기입이 있지만, 솔직히 예외 처리의 시행이 부족하다
해결 코드
지금까지 틀린 내용을 위대한 선조의 질문, 자료, 책 등으로 해결한 뒤 비교적 깨끗한 코드가 바로 이것이다.
SolutionFile.java
int all = 0;
while(all == 0){
try{
Scanner sc = new Scanner(System.in);
switch(sc.nextInt()){
case 1:
// 処理1
all +=1;
break;
case 2:
// 処理2
all +=1;
break;
default:
// 処理3
break;
}
}catch(Exception e){
// 処理4
}
}
어때요?최소한 자기 의도대로 움직였어.너는 가독성과 어디서 나온 int all,catch의 예외 처리 등을 완전히 알고 있니?이런 코드가 적혀 있지만 움직이면 OK!이러면 받아들일 수 있어.그래.코드 해설
완성된 코드(SolutionFile.java)를 물어뜯는 해설입니다.
우선 각자의 범위를 열거하다
(이곳은 범위의 시작부터 끝까지의 표시)
while // 1
try // 2
Scanner // 3
switch // 4
case 1:
case 2:
default:
switch
try
catch
catch
while
이런 느낌.while > try == catch > switch > case == default
그래?
//1
while에서 벗어나지 않으면try~catch의 처리가 끊임없이 반복됩니다.
이번 조건은 최초 선언 초기값이 0인 all가'all가 0으로 변하는 것'을 조건으로 한다.
즉, all의 값이 덧셈과 뺄셈에 의해 순환이 끝난다는 것이다.
//2
다음은 오류가 발생할 수 있는 처리입니다.try로 오류가 발생할 가능성과 오류가 발생하지 않는 일반적인 처리 내용을 포위하고catch로 예외를 포위합니다.또한 다음 설명에서catch는while의 순환량입니다. 순환을 통과하지 않았기 때문에catch내의 처리가 실행된 후에while의 시작 처리가 되돌아옵니다.
겸사겸사 말씀드리겠습니다.
원래만 오류가 발생했다면 Scanner를 입력하고 switch만 이동하려고 했지만 오류가 발생했다고 생각합니다.
다음은 switch 이동 코드입니다.
Changefile.java
int all = 0;
while(all == 0){
try{
Scanner sc = new Scanner(System.in);
}catch(Exception e){
// 処理4
}
switch(sc.nextInt()){
case 1:
// 処理1
all +=1;
break;
case 2:
// 処理2
all +=1;
break;
default:
// 処理3
continue;
}
}
エラー: シンボルを見つけられません
switch(sc.nextInt()){
^
シンボル: 変数 sc
그 이유는 switch에서sc의 요소를 얻었다는 것이다.//3
여기에는 형식만 입력됩니다.이번 코드는 칸 밖에 기재되어 있다
import java.util.Scanner;
그러므로 이 묘사는
여러 번 선언한 것이 아니기 때문에 import 선언을 하지 않고 여기에만 있다
Scanner sc = new java.util.Scanner(System.in);
아무 문제 없을 것 같습니다.
//4
여기에 입력한 내용을 얻어 얻은 내용에 따라 처리를 바꾸었다.
if문의 조건식도 가능하지만 스스로 쉽게 읽을 수 있고 코드의 뜻이 쉽게 읽을 수 있는 측면에서 switch문을 선택할 수 있습니다.
nextInt()
따라서 숫자를 입력해야 한다.
case 1:
case 2:
그럼 각자의 처리를 제외하고while의 순환을 통해
all += 1
따라서 all의 값을 1로 추가합니다.
결과all=1은 순환 조건인'all가 0 이외로 변하는'조건을 만족시키고 조건은 가짜로 변하며 순환을 이탈한다.
그리고default, 즉 1 또는 2 이외의 숫자를 입력하면 all의 값이 바뀌지 않고, 순환 조건은 가짜가 되지 않으며,while의 시작으로 처리됩니다.
즉, 1이나 2를 입력하기 전에 여러 번 입력해야 합니다!다른 숫자나 문자열을 입력할 때 계속 순환합니다!이렇게 처리합니다.
총결산
본인이 원하는 기능은요.
1 또는 2가 아닌 경우 다시 입력하십시오.
를 참고하십시오.
오해하는 점은요.
while 조건, Scanner 구성, 예외 처리
그리고 잘못을 바로잡고 해결했다. 이것이 바로 이번 보도의 내용이다.
하지만 이미 작동이 시작됐지만 여전히 코드가 많이 낭비되는 만큼 낭비를 줄이고 예외적으로 처리하는 파일럿, 타인이 쉽게 읽을 수 있는 코드 등의 문제가 있어 앞으로도 계속 시도할 예정이다.감사합니다.
Reference
이 문제에 관하여(자바 스캐너 사용법을 틀리면 (노트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/muen_6en/items/f97570ded96745370823텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)