반나
50
2021-03-24 14:54:43 작성 2021-03-24 14:55:26 수정됨
11
195

계속 이런 오류가 나와요



package loop;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Script call = new Script();
		int a;
		Scanner scan = new Scanner(System.in);
		
		Cofffee one = new Cofffee();
		Average two = new Average();
		AtoZ three = new AtoZ();
		Plus four = new Plus();
		Just99 five = new Just99();
		Run99 six = new Run99();

		while(true)
		{
			call.script();
			a=scan.nextInt();

			if(a==0)
			{
				System.out.println("시스템 종료");
				break;
			}
				if(a==1) {
					one.price();
					System.out.println();
				}
				else if(a==2) {
					two.average();
					System.out.println();
				}
				else if(a==3) {
					three.printAtoZ();
					System.out.println();
				}
				else if(a==4) {
					four.plus();
					System.out.println();
				}
				else if(a==5) {
					five.gugu1();
					System.out.println();
				}
				else if(a==6) {
					six.gugu2();
					System.out.println();
				}
			}
		scan.close();
		}
	}


입력이 없는 부분들은 함수 출력 후 다시 처음으로 잘 돌아가는데

스캐너로 입력받는 함수들은 반복이 끝나고 call.script 출력후에 저런식으로 오류가 나와요

어떤게 문제일까요??

0
  • 답변 11

  • 라모네기사
    180
    2021-03-24 16:52:57

    while 에서 hasnext로 다음 값을 확인한 뒤, 계산식을 이어나가야 하지 않을런지요?

  • BalanceE
    514
    2021-03-24 17:19:58

    전체 코드가 없으면 찾을수 없을 것같습니다.

    그냥 단순히 int값 출력하는 무한루프라 .. 

  • 반나
    50
    2021-03-24 17:22:12

    @라모네기사

    while(true)
    		{
    			call.script();
    			a=scan.nextInt();
    
    			if(a==0)
    			{
    				System.out.println("시스템 종료");
    				break;
    			}
    				if(a==1) {
    					one.price();
    					System.out.println();
    				}
    				else if(a==2) {
    					two.average();
    					System.out.println();
    				}
    				else if(a==3) {
    					three.printAtoZ();
    					System.out.println();
    				}
    				else if(a==4) {
    					four.plus();
    					System.out.println();
    				}
    				else if(a==5) {
    					five.gugu1();
    					System.out.println();
    				}
    				else if(a==6) {
    					six.gugu2();
    					System.out.println();
    				}
    			}
                    scan.hasnext();
    		}

    이렇게 말씀이실까요...?


    구글링해봤더니 스캐너를 닫지 말라고하던데 스캔 클로즈를 지우는건 어떻게생각하실까요???

  • 반나
    50
    2021-03-24 17:23:30

    @BalanceE

    알바끝나고 집에가서 이것저것 해보고 안되면 그땐 전체적으로 올려보겠습니다 감사합니다.

  • Dive_Drink_Develope
    5k
    2021-03-24 18:32:45

    스캔 클로즈를 와일문 밖에서 해야죠.


  • 반나
    50
    2021-03-25 01:12:06
  • BalanceE
    514
    2021-03-25 08:20:10 작성 2021-03-25 08:20:26 수정됨

    @반나 

    에러로그 보시면 결국 인자값을 할당하는 부분이 문제인데 (int a 관련부분이 아닙니다.)

    에러 주요부분을 올려주신게 아니라 엉뚱한 부분을 올려주셔서 제가 다 올려달라고 말씀드렸어요 ㅎㅎ

    loop2.Run99.gugu2(Run99.java:12)

    에서 해당 예외가 발생했다고 표시가 되어있는데 올려주신건 main부분이라 알수없습니다. ..ㅜ 

  • 라모네기사
    180
    2021-03-25 09:13:13 작성 2021-03-25 09:14:01 수정됨

    제가 의도한건 

    while (scan.hasNext()) {
    a = scan.nextInt();

    if (a == 0) {
    System.out.println("시스템 종료");
    break;
    }
    if (a == 1) {
    System.out.println("1");
    } else if (a == 2) {
    System.out.println("2");
    } else if (a == 3) {
    System.out.println("3");
    } else if (a == 4) {
    System.out.println("4");
    } else if (a == 5) {
    System.out.println("5");
    } else if (a == 6) {
    System.out.println("6");
    }
    }

    였는데, while(true) 해도 잘 되는군요...

    오류를 다시보니, nexInt에서 오류가 발생한 듯 한데, 중간에 문자가 섞여있다면, 문자를 거르는 부분을 넣어야 할 듯 합니다... 

    while (true) {
    String next = scan.next();
    if (next.matches("-?(0|[1-9]\\d*)")) {
    a = Integer.valueOf(next);

    if (a == 0) {
    System.out.println("시스템 종료");
    break;
    }
    if (a == 1) {
    System.out.println("1");
    } else if (a == 2) {
    System.out.println("2");
    } else if (a == 3) {
    System.out.println("3");
    } else if (a == 4) {
    System.out.println("4");
    } else if (a == 5) {
    System.out.println("5");
    } else if (a == 6) {
    System.out.println("6");
    }
    } else {
    System.out.println("string");
    }
    }
  • BalanceE
    514
    2021-03-25 10:36:30

    @라모네기사 

    nextInt에서 숫자가 아닌 문자를 넣었다면 오류는 NoSuchElement가 아니라

    형변환에 관련된 예외가 나와야 하지 않을까요?

  • 라모네기사
    180
    2021-03-25 12:59:10

    @ BalanceE

    님 말이 맞는군요. 음 그럼 결국 없는 index 벗어나는게 맞는거 같은데... 잘 모르겠네요.. 죄송합니다.

  • 반나
    50
    2021-03-25 16:04:08
    @라모네기사
    @BalanceE 
    두분다 감사합니다. 벨런스님 말씀대로 다른클래스도 같이올렸으면 금방 해결됐을 문제였었습니다.

    스캐너 클래스를 사용하는 다른 메소드에서 
    스캔을 종료했는데 while문에서 스캔을 또 종료해서 여러번 닫힌게 문제였던것 같아요 스캔.클로즈를 전부 주석처리했더니 해결됐습니다. 대학생 과제하나에 힘써주셔서 감사드립니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.