본문 바로가기
computing

20250417_java7

by greentworkshop 2025. 4. 17.

예외처리, 객체지향 프로그래밍

부정과 불능 0 / 10(부정), 10 / 0(불능)

파일입출력(자료형, 배열)

import java.util.*; // scanner클래스 기능 모두 사용
public class DivideByZero {
public static void main(String[] args) {
 	Scanner scanner = new Scanner(System.in);
	int dividend; // 나누어질 수
	int divisor; // 나눌 수
	System.out.print("나누어질 수를 입력하시오:");
	dividend = scanner.nextInt();
 	System.out.print("나눌 수를 입력하시오:");
 	divisor = scanner.nextInt(); // 나눗수 입력
	try {//----------------------------------------------------------------------------
    System.out.println(dividend + "를 "+divisor + "로 나누면 몫은 "+dividend / divisor + "입니다.");
 	} catch (ArithmeticException e) {//----------------------------------------------
 	System.out.println("0으로 나눌 수 없습니다...");
 	}
}

try catch문

try{
	//예외발생 가능성이 있는 실행문
}
catch(처리할 예외 타입){
	//예외 처리문
}
finally{
	예외발생 여부와 상관없이 무조건 실행되는 문장(생략 가능)
}
public class Main022 {
 public static void main(String[] args) {
 try {
 int[] numbers = { 1, 2, 3 };
 System.out.println(numbers[4]);
 } catch (ArrayIndexOutOfBoundsException e) {
 System.out.println("배열인덱스가 잘못되었습니다");
 }
 }
 }
Exception e의 하위 폴더
ㄴArithmeticException e
ㄴArrayIndexOutOfBoundsException e

문제 3개의 값을 입력받아서 정수가 아니면 오류메세지 추력하는 프로그램

시험문제

import java.util.*;

    public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("정수를 3개 입력하세요.");
        int sum=0;
        int n = 0;
        for(int i=0; i<3; i++) {
            try{
            n = scanner.nextInt(); // 키보드에서 정수 입력
            }catch (Exception e){
                System.out.println("정수가 아닙니다. 다시 입력하세요");
               scanner.next();//*****
                i--; //
                continue;
            }
                sum += n; 
            }
            
        System.out.println("양수의 합은 " + sum);
    }
 }

 

코드에서 scanner.next();가 하는 역할을 간단하게 설명해볼게요!

scanner.next();의 역할:

scanner.next()는 입력 버퍼에서 다음 토큰(단어)을 읽어오는 메서드입니다. 여기서 중요한 점은 입력된 데이터를 읽어오는 데 사용된다는 것인데, 입력 값이 잘못되었을 때 그 잘못된 값을 소비하고 버리기 위한 용도입니다.

이 메서드는 입력 버퍼에서 문자열을 읽기 때문에, 예외가 발생했을 때 사용자가 잘못 입력한 잘못된 입력을 "버리기" 위해서 쓰입니다.

왜 scanner.next();를 사용해야 할까요?

이 코드는 사용자가 정수가 아닌 값을 입력했을 때 예외가 발생하는데, 예외를 처리하고 나서 잘못된 입력을 건너뛰기 위해 scanner.next();를 사용합니다.

예를 들어, 사용자가 abc 같은 문자를 입력했다면, scanner.nextInt()에서 **InputMismatchException**이 발생할 것입니다. 그때 catch 블록이 실행되는데, 여기서 scanner.next();가 호출되어 abc를 소비하고 버립니다.

이렇게 함으로써 입력 버퍼에 남아 있는 잘못된 값이 다음 입력을 방해하지 않도록 하고, 다시 i--와 continue로 반복문을 실행하여 사용자가 올바른 정수를 입력할 수 있게 만듭니다.

예시로 설명:

  1. 사용자가 "abc"를 입력 -> InputMismatchException 발생.
  2. catch 블록이 실행되어 "정수가 아닙니다. 다시 입력하세요"가 출력됨.
  3. scanner.next();가 호출되어 "abc"를 입력 버퍼에서 소비하고 버립니다.
  4. 반복문에서 i--가 실행되어, 사용자에게 다시 정수를 입력받을 수 있게 합니다.

코드 설명 (다시 보기):

try {
    n = scanner.nextInt();  // 사용자 입력을 정수로 받으려고 시도
} catch (Exception e) {
    System.out.println("정수가 아닙니다. 다시 입력하세요");
    scanner.next(); // 잘못된 입력(문자열 등)을 버리기 위해 호출
    i--;  // 반복문 인덱스를 하나 감소시켜 다시 입력을 받도록 함
    continue; // 그 다음 로직을 건너뛰고 반복문 처음으로 돌아가도록 함
}

즉, scanner.next();는 사용자가 잘못된 입력을 했을 때, 그 입력을 버리고, 정상적인 입력을 받기 위해 사용됩니다.

정리:

  • scanner.next();는 잘못된 입력을 소비하고 버리는 역할을 합니다.
  • 예외가 발생했을 때 catch 블록 내에서 이 메서드를 사용하여 잘못된 값을 버리고, 프로그램의 흐름을 정상으로 되돌리기 위한 목적입니다.

public static void - method

public class Rabbit{
    String shape="";
    int xpos;
    int ypos;
    
    void setPosition(int x, int y){
        int xpos;
        int ypos;
    }
    void printInfo(){
        System.out.println(r"모양:"+shape+", 위치:("+xpos+","+ypos+")");
        }

}
/*MainRabbit클래스*/
 public class MainRabbit {
 public static void main(String[] args) {
    Rabbit rabbit1=new Rabbit();
    Rabbit rabbit2=new Rabbit();
    Rabbit rabbit3=new Rabbit();
 //속성값대입: 객체명.속성명
    rabbit1.shape="원";
    rabbit1.shape="삼각형";
    rabbit1.shape="토끼";
    }
}

생성자란?

• 객체가 생성될 때 자동으로 호출되는 특별한 메서드를 말함

•클래스이름과이름이같고

•리턴타입이없는메서드입니다.

•객체가생성될때(new 키워드로) 자동 실행됩니다.

접근제어자 생략, 

 

final데이터 필드값을 고정

클래스의 접근 제어자 의 특징(상속, 다형성, 은)

 

~~

객체지향 프로그래밍ppt 생성자까지 시험범위

클래스 생성, 속성...

생성자의 개념 역할...

'computing' 카테고리의 다른 글

20250508_java10  (0) 2025.05.08
나는 언제쯤 행복해질까?  (0) 2025.05.08
20250410_java6  (1) 2025.04.10
DB기말 정리  (2) 2025.04.07
20250407DB_부속질의  (0) 2025.04.07