728x90
반응형

문제

  • Random 함수를 이용한다.
  • 무한 반복문을 이용한다.
  • 몇 문제를 풀 것인지 입력 받고, 입력 받은 숫자만큼 문제를 출력한다.
  • 정수형 변수 num1과 num2에 랜덤 값을 넣는다.
  • num1의 값과 num2의 값을 곱한 결과와 사용자가 입력한 값이 같은지 비교하여 정답과 오답을 출력한다.
  • 모든 문제가 종료된 뒤 0을 입력하면 break문을 이용해 무한 반복문을 입력을 종료한다. 0 외의 숫자를 입력하면 다시 문제 수를 입력 받는다.

 

 

 

코드

		//곱셈 문제
		Random rand = new Random();	//랜덤 값
		Scanner scan = new Scanner(System.in);	//입력

		int first=1;//문제를 구분하는 선을 출력하기 위해 선언
		while(true){
			if(first!=1)//문제를 구분하기 위해 출력. 문제 풀이를 두 번 이상 반복할 때 출력
				System.out.println("-------------------------------------------------------------------");
			first=0;
			
			System.out.print("문제 수를 입력하시오 >> ");
			int work = scan.nextInt();
			System.out.println("총 "+work+"문제가 출력됩니다.\n");
			
			for(int i=1;i<=work;i++){
				//곱셈 값 만들기
				int num1 = rand.nextInt(8)+2;	// 2단부터 9단까지 출력	
				int num2 = rand.nextInt(9)+1;	// 1부터 9까지 출력
				int multiplication = num1*num2;	//곱셈의 정답을 저장하는 변수

				System.out.printf("%d번 문제:%d*%d=",i,num1,num2);	//랜덤 문제 출력

				//정답 맞추기
				int check = scan.nextInt();	//입력한 값이 정답이 맞는지 확인하는 변수

				if(check==multiplication)
					System.out.println("정답입니다.");
				else
					System.out.printf("오답입니다.정답은 %d입니다.\n",multiplication);
				System.out.println(); //한 문제가 끝나면 줄바꿈
			}
			
			//문제 종료
			int question = 1;
			System.out.print("계속해서 문제를 푸시겠습니까? 종료를 원하시면 0을 입력해주세요. >> ");
			question =scan.nextInt();

			if(question== 0)
				break;	//무한 반복 종료

		}
		System.out.println("수고하셨습니다. 문제 풀이가 종료되었습니다.");
        
		scan.close();

 

 

출력 결과

문제 수를 입력하시오 >> 2
총 2문제가 출력됩니다.

1번 문제:7*2=14
정답입니다.

2번 문제:4*5=22
오답입니다.정답은 20입니다.

계속해서 문제를 푸시겠습니까? 종료를 원하시면 0을 입력해주세요. >> 1
-------------------------------------------------------------------
문제 수를 입력하시오 >> 1
총 1문제가 출력됩니다.

1번 문제:2*8=16
정답입니다.

계속해서 문제를 푸시겠습니까? 종료를 원하시면 0을 입력해주세요. >> 0
수고하셨습니다. 문제 풀이가 종료되었습니다.

 

728x90
반응형
728x90
반응형

문제

영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

입력 출력
aBcDeFg AbCdEfG
  • str은 알파벳으로 이루어진 문자열입니다.

 

 

 

코드

		String str="aBcDeFg";
		String str2="";
		
		System.out.println("변경 전:"+str);
		
		//아스키 코드표를 기준으로 대문자의 값과 소문자의 값이 32가 차이가 나는 점을 이용한다
		for(char c : str.toCharArray()){
			if(c>=65&&c<=90){ //대문자를 소문자로 변경
				str2+=(char)(c+32);
			}
			else if(c>=97&&c<=122){ //소문자를 대문자로 변경
				str2+=(char)(c-32);
			}
		}//for_end
		
		System.out.println("변경 후:"+str2);

 

 

 

출력 결과

변경 전:aBcDeFg
변경 후:AbCdEfG

 

 

728x90
반응형

'문제 > JAVA' 카테고리의 다른 글

[JAVA] 약수의 합  (0) 2023.05.29
[JAVA] 옹알이  (0) 2023.05.28
[JAVA] 삼총사  (0) 2023.05.24
[JAVA] 알파벳 대소문자 변환 (아스키 코드표 이용)  (0) 2023.05.23
[JAVA] 금액 표시하기 (돈 단위 표시)  (0) 2023.05.23
728x90
반응형

문제

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다.

예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

입력 출력
[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

 

▶ 제한사항

  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.
  • [-3, -2, -1, 0, 1, 2, 3]에서 학생들의 정수 번호 쌍 (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) 이 삼총사가 될 수 있으므로, 5를 return 합니다.

 

 

 

Solution 코드

class Solution {
	public int solution(int[] number) {
		int result=0;	//삼총사가 되는 값 출력

		//삼총사 값 구하기
		for(int i=0;i<number.length;i++){//0번째 배열을 선택하여 비교

			for(int j=i+1;j<number.length;j++){//i번째 배열 바로 옆의 값부터 선택
	
				for(int k=j+1;k<number.length;k++){//j번째 배열 바로 옆의 값부터 선택하여 반복
					if((number[i] + number[j] + number[k]) == 0){
						result++;	//세 값을 합쳤을 때 0이 나오면 삼총사!!
					}
				}//for_k_end
			}//for_j_end
		}//for_i_end

		 //삼총사가 0명일 때 출력
		if(result==0)
			System.out.println("삼총사가 될 수 있는 방법이 없습니다.");

		return result;	//삼총사 값 리턴
	}
}//Solution_end

 

 

 

main 코드

▶ 작성한  solution 함수를 이용하여 main문에서 출력해 보자.

		Solution s = new Solution();
        
		int[] number1={-2,3,0,2,-5};
		int[] number2={-3,-2,-1,0,1,2,3};
		int[] number3={-1,1,-1,1};
		
		//삼총사 값 출력
		int num = s.solution(number1);
		System.out.println("삼총사 수:"+num);
		
		num = s.solution(number2);
		System.out.println("삼총사 수:"+num);
		
		num = s.solution(number3);
		System.out.println("삼총사 수:"+num);

 

 

 

출력 결과

삼총사 수:2
삼총사 수:5
삼총사가 될 수 있는 방법이 없습니다.
삼총사 수:0
728x90
반응형
728x90
반응형

<오늘의 학습>

1. 창 종료

2. 이미지 출력

3. 대화창 만들기

4. 예외 처리

 

 

4. 예외 처리

  1. 에러 : 프로그램 언어의 문법적인 오류.
  2. exception(예외) : 프로그램을 실행하는 동안 예기치 않은 이상 상태(예외 상황)가 발생하는 것.
  3. throws : 예외가 발생했을 때, 메서드를 호출한 곳으로 제어권을 넘긴다.
  4. 예외는 프로그램이 실행되는동안 문제가 발생했을 때 대처할 수 있게 처리한다.
  5. 예외 클래스 계층 구조

    Throwable

    Exception

    IOException
    FileNotFoundException
    ClassNotFoundException : DB작업을 할 때 필수로 사용해야 한다.

    ArrayIndexOutOfBoundsException : 배열 예외 발생
    NumberFormatException : 숫자가 아닐 때 예외 발생
    ArithmeticException : 연산 예외 3/0

 

▶ 예외 처리 2가지 방법

  1.  직접 처리

    try{
         처리문;
         처리문;
         처리문;
    } catch(예외 종류1){
         //처리:메시지 출력
    } catch(예외 종류2){
         //처리:메시지 출력
    } finally {
         처리내용; //db.close();
    }


  2. 간접 처리
    public 리턴형 메서드() throws 예외종류{
         처리문;
         처리문;
         처리문;
    }


  3.  메서드 내용을 처리하는 동안 예외가 발생하면 메서드를 호출한 곳으로 제어권을 넘긴다.
    ex) public static void main(String ags[]) throws Exception {
         처리문
         처리문
    }

 

※finally: 예외 발생과 상관없이 실행된다
   앞에 return문이 있어도 finally절은 수행하지만, 앞에 System.exit(0) 구문이 있으면 finally절은 수행하지 않는다.

 

 

 

예외 처리

▶ Run - Run Configurations... - Arguments 에서 값을 바꾸며 예외 처리 확인 가능

  1. 실행 : 배열에러 발생 ->e1
  2. 배열 값을 숫자로 입력하고 실행
  3. 배열 값을 입력하지 않고 실행 ->e2
  4. 문자 a를 입력하고 실행 ->e2
  5. 숫자 입력. 수식 변경(연산 에러)

 

▷ 홀수 값 출력

public static void main(String[] args) {
		//직접 처리
		try{
			int num=Integer.parseInt(args[0]);
			
			if(num%2==0){ //짝수일 때
				System.out.println(num+"은 짝수이다.");
			}else{
				System.out.println(num+"은 홀수이다.");
			}
		}catch(ArrayIndexOutOfBoundsException e1){
			System.out.println("배열 에러:"+e1);
		}catch(NumberFormatException e2){
			System.out.println("숫자를 입력하세요:"+e2);
		}catch(ArithmeticException e3){
			System.out.println("연산 예외:"+e3);
		}finally{
			System.out.println("예외 발생과 상관없이 실행된다.");
		}
	}//main_end
배열 에러:java.lang.ArrayIndexOutOfBoundsException: 0
예외 발생과 상관없이 실행된다

 

 

▷ 홀수 값 출력

Program argument 값에 77을 입력하고 디버그

77은 홀수이다.
예외 발생과 상관없이 실행된다

 

 

▷ 연산 예외 출력

try문에 if문 연산 값 변경

			if(num%0==0){	//Arguments에 숫자를 넣으면 연산 예외
				System.out.println(num+"은 짝수이다.");
			}else{
				System.out.println(num+"은 홀수이다.");
			}
연산 예외:java.lang.ArithmeticException: / by zero
예외 발생과 상관없이 실행된다

 

 

 

 

 


2023년 5월 24일 수요일

<9일차 수업 후기>

오늘은 Frame과 예외 처리에 대한 실습 위주의 수업을 했다. 예외 처리는 직관적인 이름을 가지고 있지만 길이가 길고 자주 사용해 보지 않아서 익숙하지는 않은 것 같다.

9일 동안 모든 내용을 자세하게 수업한 것은 아니지만, 한 번씩 내용을 훑어보면서 내가 어려워하는 부분과 잘하는 부분을 확실히 알 수 있는 시간이었다.

10일차 수업부터는 다른 강사님께서 JAVA 수업을 다시 해주시는데, 그 기간 동안 내가 부족한 부분인 인터페이스나 예외 처리 위주로 공부를 해야겠다.

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 창 종료

2. 이미지 출력

3. 대화창 만들기

4. 예외 처리

 

 

1. AWT를 이용한 창 종료

▶ window 창을 종료(프로그램 종료)하는 방법

  1. 해당 클래스나 인터페이스를 상속 받는다.
  2. 이벤트 등록을 한다.
  3. 그에 해당하는 메소드를 오버라이딩 한다.

 

1) 인터페이스 WindowListener 를 사용하여 창을 종료해 보자.

package java_practice;

import java.awt.*;	//window 예제를 위해 창을 만드는 Frame을 사용한다.
import java.awt.event.*; //이벤트를 처리하는 인터페이스와 클래스

public class Test01_window extends Frame implements WindowListener{
	//생성자
	public Test01_window() {
		super("인터페이스를 이용하여 창 종료");//첫 줄에 기재하여 상위 클래스 생성자 호출
		setBackground(Color.pink);//super(또는 this).setBackground();와 같은 실행을 한다.
		addWindowListener(this);
		setSize(700,500);//가로:700, 세로:500
		setVisible(true);
	}//Test01_window_end
	
    
	//인터페이스의 추상 메소드 오버라이딩.
	//추상 메소드를 오버라이딩하지 않으면 오류가 난다. 인터페이스의 메소드는 모두가 추상이기 때문에 반드시 모두 오버라이딩 해야 한다.
	public void windowClosing(WindowEvent e) {
		//dispose();//리소스 반환
		System.exit(0);//프로그램 종료. X를 누르면 종료됨
	}
	public void windowOpened(WindowEvent e) {}
	public void windowClosed(WindowEvent e) {}
	public void windowIconified(WindowEvent e) {}
	public void windowDeiconified(WindowEvent e) {}
	public void windowActivated(WindowEvent e) {}
	public void windowDeactivated(WindowEvent e) {}

	
	public static void main(String[] args) {
		new Test01_window();
	}//main_end
}//class_end

출력 결과

 

 

2) inner class를 사용하여 WindowAdapter 클래스를 상속해 창을 종료해 보자.

public class Test02_window extends Frame {
	//생성자
	public Test02_window(){
		super("inner class를 사용하여 WindowAdapter 클래스를 상속해 창 종료");
		setBackground(Color.darkGray);
		addWindowListener(new MyWin());
		setSize(800,800);//가로:700, 세로:500
		setVisible(true);
	}//Test02_window_end
	
    
	//창을 종료하는 inner 클래스. 클래스는 7개를 다 오버라이딩하지 않아도 된다.
	class MyWin extends WindowAdapter{
		public void windowClosing(WindowEvent w){
			System.exit(0);//프로그램 종료
		}
	}//MyWin_end
	
    
	public static void main(String[] args) {
		new Test02_window();
	}//main_end
}//class_end

출력 결과

 

 

3) 이름이 없는 클래스를 사용하여 창을 종료해 보자

public class Test03_anonymous extends Frame{
	//생성자
	public Test03_anonymous(){
		super("이름 없는 클래스를 사용하여 창 종료");
		setBackground(Color.orange);
		setSize(400,200);
		setVisible(true);
		
		//이름 없는 클래스
		addWindowListener(new WindowAdapter(){
			//오버라이딩
			public void windowClosing(WindowEvent w){
				System.exit(0);
			}
		});
	}//Test03_anonymous_end
	
    
	public static void main(String[] args) {
		new Test03_anonymous();
	}//main_end
}//class_end

출력 결과

 

 

※ 같은 패키지에서 다른 클래스를 호출할 수 있다.

package java_practice;	//같은 패키지

public class Test_window {
	public static void main(String[] args) {
		new Test03_anonymous();
	}//main_end
}//clase_end

출력 결과

 

 

 

2. AWT를 이용한 이미지 출력

1) jpg 파일 출력

▶ jpg 파일 저장

C:\imgs\image.jpg

 

▶ 코드 작성

public class Test04_img extends Frame{
	//변수
	Image img;

	//생성자
	public Test04_img(){
		super("이미지를 출력해 보자");
		img=Toolkit.getDefaultToolkit().getImage("C:\\imgs\\image.jpg");//윈도우는 \를 2개 써야 한다.

		setSize(1300,600);
		setVisible(true);
		addWindowListener(new MyWin());
	}//Test04_img_end


	//메소드 paint(Graphics g)
	public void paint(Graphics g){
		g.drawImage(img, 50, 20, this);//x:50, y:20, this:여기에 출력한다.
	}


	//창을 종료하는 inner 클래스
	class MyWin extends WindowAdapter{
		public void windowClosing(WindowEvent w){
			System.exit(0);//프로그램 종료
		}
	}//MyWin_end


	public static void main(String[] args) {
		new Test04_img();
	}//main_end
}//class_end

 

▶ 출력

출력 결과

 

 

2) 이미지 크기를 줄여서 출력

	//변수
	Image img;

	//디폴트 생성자
	public Test04_img(){
		super("이미지를 출력해 보자");
		img=Toolkit.getDefaultToolkit().getImage("C:\\imgs\\image.jpg");//윈도우는 \를 2개 써야 한다.

		setSize(800,500);
		setVisible(true);
		addWindowListener(new Mywin());
	}//Test04_img_end


	//메소드 paint(Graphics g)
	public void paint(Graphics g){
		//g.drawImage(img, 50, 20, this);//x:50, y:20, this:여기에 출력한다.
		g.drawImage(img, 50, 50, 400, 300, this);//width:300, height:200
	}//paint_end


	//창을 종료하는 inner 클래스
	class Mywin extends WindowAdapter{
		public void windowClosing(WindowEvent w){
			System.exit(0);//프로그램 종료
		}
	}//Mywin_end


	public static void main(String[] args) {
		new Test04_img();
	}//main_end

출력 결과

 

 

 

3. 대화창 만들기

▶ 코드 작성

public class Test05_event extends Frame implements ActionListener{
	//변수
	TextField tf1,tf2;
	TextArea ta;

	//생성자
	public Test05_event(){
		super("이벤트 대화창 출력");//첫 줄에 기재하여 상위 클래스 생성자 호출

		tf1=new TextField();//객체 생성
		tf2=new TextField();//객체 생성
		ta=new TextArea();//객체 생성

		//배경 색상
		tf1.setBackground(Color.red);
		tf2.setBackground(Color.blue);
		ta.setBackground(Color.yellow);

		//글자 색상
		tf1.setForeground(Color.white);
		tf2.setForeground(Color.white);

		//폰트 설정
		tf1.setFont(new Font("Dialog", Font.BOLD, 20));//폰트 설정:BOLD(굵게), 폰트 크기:20
		tf2.setFont(new Font("Dialog", Font.PLAIN, 20));//폰트 설정:PLAIN, 폰트 크기:20
		ta.setFont(new Font("Dialog", Font.PLAIN, 20));//폰트 설정:PLAIN, 폰트 크기:20


		//Frame 컨테이너에 컴포넌트 붙이기
		add(tf1,"North");//위에 위치. North의 N은 대문자로 작성
		add(tf2,"South");//밑에 위치. South의 S은 대문자로 작성
		add(ta,"Center");//가운데에 위치. Center의 C은 대문자로 작성


		//이벤트 등록
		this.addWindowListener(new MyWin());
		tf1.addActionListener(this);
		tf2.addActionListener(this);

		addWindowListener(new MyWin());
		setSize(500,500);
		setVisible(true);

	}//Test05_event(cons_end)


	//inner class
	class MyWin extends WindowAdapter{
		//오버라이딩
		public void windowClosing(WindowEvent w){
			System.exit(0);//프로그램
		}
	}//Mywin_end


	//메소드 오버라이딩
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==tf1){
			String msg="홍길동>>"+tf1.getText();//지역 변수 메세지. 받아온 text를 입력
			ta.append(msg+"\n");
			tf1.setText("");//tf1 내용 지움
			tf2.requestFocus();//tf2으로 포커스 이동
		}
		else if(e.getSource()==tf2){
			String msg="저팔계>>"+tf2.getText();//지역 변수 메세지. 받아온 text를 입력
			ta.append(msg+"\n");
			tf2.setText("");//tf2 내용을 지움
			tf1.requestFocus();//tf1으로  포커스 이동
		}
	}


	public static void main(String[] args) {
		new Test05_event();
	}//main_end
}//class_end

 

▶ 출력 결과

출력 결과.

 

 

▶ 대화창에 텍스트를 입력해 보자

- 대화창처럼 보이기 위해 ㅎㅇ/ㅎㅇ를 먼저 주고받아 보았다.

tf1에 텍스트를 입력해 보자. (뭐해?)

 

tf1에서 입력한 텍스트가 ta에 출력되고 tf2로 커서가 이동된다. 이번에는 tf2에 텍스트를 입력해 보자. (수업들어)

 

tf2에서 입력한 텍스트가 ta에 출력되고 tf1로 커서가 이동된다.

 

 

 

 

다음 학습

 

[JAVA] 예외 처리 (9일차)

1. 창 종료 2. 이미지 출력 3. 대화창 만들기 4. 예외 처리 4. 예외 처리 에러 : 프로그램 언어의 문법적인 오류. exception(예외) : 프로그램을 실행하는동안 예기치 않은 이상 상태(예외 상황)가 발생

deliciouscode.tistory.com

728x90
반응형

+ Recent posts