본문 바로가기
휴먼 IT 교육 수업 메모

[휴먼IT] JAVA 수업 2일차 메모 (250103)

by demianpark127 2025. 1. 3.
SMALL
package test;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Counter extends JFrame {

    // 생성자
    Counter() {
        // 초기 설정
        setTitle("카운터");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container contentPane = getContentPane();
        contentPane.setBackground(Color.BLACK);

        MyLabel mb = new MyLabel(0); // 초기값 설정
        contentPane.add(mb);

        setSize(1000, 800);
        setVisible(true);

        mb.setFocusable(true);
        mb.requestFocus();
    }

    // MyLabel 클래스
    class MyLabel extends JLabel implements Runnable {

        int value; // 카운터 값
        Thread th; // 스레드
        volatile boolean isRunning = false; // 스레드 실행 상태 플래그

        // 생성자
        public MyLabel(int value) {
            this.value = value;
            setText(Integer.toString(value));
            setFont(new Font("TimesRoman", Font.ITALIC, 300));
            setHorizontalAlignment(JLabel.CENTER);
            setForeground(Color.WHITE);

            this.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (isRunning) {
                        // 스레드 중단
                        isRunning = false;
                        if (th != null) {
                            th.interrupt();
                        }
                    } else {
                        // 스레드 시작
                        isRunning = true;
                        th = new Thread(MyLabel.this);
                        th.start();
                    }
                }
            });
        }

        @Override
        public void run() {
            while (isRunning) {
                try {
                    Thread.sleep(100); // 0.1초마다 증가
                } catch (InterruptedException e) {
                    // 스레드 종료 시 예외 처리
                    return;
                }

                value++;
                SwingUtilities.invokeLater(() -> {
                    setText(Integer.toString(value));
                });
            }
        }
    }

    public static void main(String[] args) {
        new Counter();
    }
}

화면을터치하면 0.1초마다 숫자가 증가하고 다시 터치하면 멈춘다

 

package datainput;

public class DataInput1 {
	public static void main(String[] args) {
		//미션!
		/*
		 	1. 첫번째 정수를 입력한다.
		 	2. 두번째 정수를 입력한다.
		 	
		 	3. 출력
		 		. 더하기값을 출력한다
		 		. 빼기 값을 출력한다
		 		. 곱하기 값을 출력한다
		 		. 나누기 값을 출력한다.
		 			- 형변환
		 				. 문자/문자열과 숫자가 결합하면 문자타입이 된다 >> String str = "오늘"+100
		 				. 정수에서 byte  변수    +  연산자  +  byte  변수		= int에 저장한다
		 						 short 변수			      short 변수
		 						 int   변수				  int   변수
		 			 	. 작은것 + 큰것 = 큰것에 저장한다
		 			 	. float : 10.3f    f를 붙인다
		 			 	. 나누기 : int/int = int,  int/float = float,  int/(float)int = float		 			 	  
		 */
	}

}
package datainput;

public class DataInput2 {
	/*
	 	0. 구매하실 제품의 사양을 입력해주세요
	 	1. 제품명을 입력받는다
	 	2. 제품색상을 입력받는다
	 	3. 제품의 가격을 입력받는다
	 	4. 제품의 무게를 입력받는다
	 	5. 주문하신 제품의 사양은 000000000 입니다.
	 */

}
package datatype;

import java.util.Scanner;

public class type01 {
	
	public static void main(String[] args) {
		
		int num1;
		Scanner sc = new Scanner(System.in);
		System.out.println("숫자입력>> ");
		num1 = sc.nextInt();
		sc.close();
		
		//10진수
		System.out.println(num1);
		
		//2진수 접두사 0bxxxx		// 	  32 16 8 4 2 1
		int num2 = 0b1111;		//	   0  0 1 1 1 1 = 15
		System.out.println(num2);
		//8진수 접두사 0			//      4 2 1   4 2 1
		int num3 = 010;			//      0 0 1   0 0 0 = 8
		System.out.println(num3);
		//16진수 접두사 0x			//  8 4 2 1  8 4 2 1
		// ~9 A B C D E F
		int num4 = 0x10;		//  0 0 0 1  0 0 0 0 = 16
	}

}

 

package datatype;

public class Type2 {
	public static void main(String[] args) {
		byte num1 = Byte.MAX_VALUE;
		System.out.println(num1);
		String binaryString = String.format("%s", 
				Integer.toBinaryString(num1 & 0xFF)).replace(' ','0');
		System.out.println("바이트의 비트표현: " + binaryString); // 01111111
		
		
		byte num2 = Byte.MIN_VALUE;
		System.out.println(num2);	
		binaryString = String.format("%s", 
				Integer.toBinaryString(num2 & 0xFF)).replace(' ','0');
		System.out.println("바이트의 비트표현: " + binaryString);
	}

}

 

127
바이트의 비트표현: 1111111
-128
바이트의 비트표현: 10000000

128 64 32 16 8 4 2 1
 0  1  1  1  1 1 1 1 (127)
 1  0  0  0  0 0 0 0 (-128)

자바(Java)에서 2진수, 8진수, 16진수 설명

자바에서는 다양한 **진법(기수법)**을 지원하여 숫자를 표현할 수 있습니다. 각 진법은 특정 **접두사(prefix)**를 사용하여 구분됩니다.


📚 1. 2진수(Binary)

  • 표기법: 0b 또는 0B
  • 사용 가능한 숫자: 0, 1
  • 기본 특징: 2진수는 컴퓨터가 데이터를 저장하고 처리하는 기본 단위입니다.

🛠️ 예제

java
코드 복사
int binary = 0b1010; // 2진수 1010 → 10진수 10 System.out.println(binary); // 출력: 10

🧠 설명

  • 0b는 **"이 숫자는 2진수"**임을 나타냅니다.
  • 1010은 2진수로, 10진수로 변환하면 10입니다.

📚 2. 8진수(Octal)

  • 표기법: 0 (숫자 0 접두사)
  • 사용 가능한 숫자: 0 ~ 7
  • 기본 특징: 예전 시스템에서 파일 권한을 표현할 때 주로 사용되었습니다.

🛠️ 예제

java
코드 복사
int octal = 010; // 8진수 10 → 10진수 8 System.out.println(octal); // 출력: 8

🧠 설명

  • 0은 **"이 숫자는 8진수"**임을 나타냅니다.
  • 010은 8진수로, 10진수로 변환하면 8입니다.

📚 3. 16진수(Hexadecimal)

  • 표기법: 0x 또는 0X
  • 사용 가능한 숫자: 0 ~ 9, A ~ F
  • 기본 특징: 16진수는 메모리 주소나 색상 코드 등을 표현할 때 주로 사용됩니다.

🛠️ 예제

 

🧠 설명

  • 0x는 **"이 숫자는 16진수"**임을 나타냅니다.
  • 1A는 16진수로, 10진수로 변환하면 26입니다.

📊 진법 정리표

진법접두사사용 가능한 숫자예시10진수 값

2진수 0b 0, 1 0b1010 10
8진수 0 0 ~ 7 010 8
16진수 0x 0 ~ 9, A ~ F 0x1A 26

📝 실전 예제

public class NumberSystems {
    public static void main(String[] args) {
        int binary = 0b1010; // 2진수
        int octal = 010;     // 8진수
        int hex = 0x1A;      // 16진수
        int decimal = 26;    // 10진수

        System.out.println("2진수 (0b1010): " + binary); // 출력: 10
        System.out.println("8진수 (010): " + octal);     // 출력: 8
        System.out.println("16진수 (0x1A): " + hex);     // 출력: 26
        System.out.println("10진수 (26): " + decimal);   // 출력: 26
    }
}

🔑 실행 결과

2진수 (0b1010): 10
8진수 (010): 8
16진수 (0x1A): 26
10진수 (26): 26

 


🔍 주요 포인트 정리

  1. 2진수: 0b로 시작, 0과 1 사용.
  2. 8진수: 0으로 시작, 0~7 사용.
  3. 16진수: 0x로 시작, 09, AF 사용.
  4. 출력 시: System.out.println()은 항상 숫자를 10진수로 출력합니다.

 

package datatype;

import java.util.Scanner;

public class type01 {
	
	public static void main(String[] args) {
		
		int num1;
		Scanner sc = new Scanner(System.in);
		System.out.println("숫자입력>> ");
		num1 = sc.nextInt();
		sc.close();
		
		//10진수
		System.out.println(num1);
		
		//2진수 접두사 0bxxxx		// 	  32 16 8 4 2 1
		int num2 = 0b1111;		//	   0  0 1 1 1 1 = 15
		System.out.println(num2);
		//8진수 접두사 0			//      4 2 1   4 2 1
		int num3 = 010;			//      0 0 1   0 0 0 = 8
		System.out.println(num3);
		//16진수 접두사 0x			//  8 4 2 1  8 4 2 1
		// ~9 A B C D E F
		int num4 = 0x10;		//  0 0 0 1  0 0 0 0 = 16
		System.out.println(num4);
	}

}

출력

숫자입력>> 
13
13
15
8
16
package datatype;

public class Type2 {
	public static void main(String[] args) {
		byte num1 = Byte.MAX_VALUE;
		System.out.println(num1);
		String binaryString = String.format("%s", 
				Integer.toBinaryString(num1 & 0xFF)).replace(' ','0');
		System.out.println("바이트의 비트표현: " + binaryString); // 01111111
		
		//128 64 32 16 8 4 2 1
		// 0  1  1  1  1 1 1 1 (127)
		// 1  0  0  0  0 0 0 0 (-128)
		
		byte num2 = Byte.MIN_VALUE;
		System.out.println(num2);	
		binaryString = String.format("%s", 
				Integer.toBinaryString(num2 & 0xFF)).replace(' ','0');
		System.out.println("바이트의 비트표현: " + binaryString);
	}

}

출력
127
바이트의 비트표현: 1111111
-128
바이트의 비트표현: 10000000
package datatype;

public class Type3 {
	public static void main(String[] args) {
		
		char c1 = '\"';
		System.out.println(c1);
		System.out.println("우리나라 \\좋은\\ 나라"); //이스케이프 문자 \t, \n(줄바꿈), \n(줄바꿈), \', \",,,
		System.out.println("우리나라\n좋은나라");
		System.out.println();
		System.out.print("우리나라\n");
		System.out.println("좋은나라\n");
		
		char c2='한';
		char c3='국';
		char c4='K';
		char c5='\u004f'; //유니코드
		char c6='R';
		char c7='\u0045';
		char c8='A';
		System.out.print("출력결과\n"+c2+c3+c4+c5+c6+c7+c8);
	}
}

출력

"
우리나라 \좋은\ 나라
우리나라
좋은나라

우리나라
좋은나라

출력결과
한국KOREA
package datatype;

public class type5 {
	public static void main(String[] args) {
	
		byte b = 127;
		int i = 100;
		
		System.out.println("b+i="+(b+i));
		System.out.println("10/4="+(10/4)); // 값이 기대값과 다름
		System.out.println("10/4.0="+(10/(float)4));
		
		System.out.println("(byte)(b+i)="+((byte)(b+i)));
	}
}

출력
b+i=227
10/4=2
10/4.0=2.5
(byte)(b+i)=-29

 

 

IF문

 

package if문;

import java.util.Scanner;

public class if_season {
	
	public static void main(String[] args) {
		//월입력 받아서 봄,여름,가을,겨울 판별출력
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("월을 입력해 주세요");
		int month = sc.nextInt();
		
		if(month>=3 && month<=6) {
			System.out.println("봄 입니다");
		}else if(month>=7 && month<=9) {
			System.out.println("여름 입니다");
		}else if(month>=10 && month<=11) {
			System.out.println("가을 입니다");
		}else {
			System.out.println("겨울 입니다");
		}
		
		/*
		 	1. 정수를 입력받는다
		 	2. 짝수인지 홀수인지 판별해서 출력한다
		 	
		 	if(2로 나누어서 0이냐) {
		 		짝수입니다
		 	else{
		 		홀수입니다
		 	}
		 */
		
		System.out.println("정수를 입력해 주세요");
		int intnum = sc.nextInt();
		
		if(intnum % 2 == 0) {
			System.out.println("짝수 입니다");
		}else
			System.out.println("홀수 입니다");		
		
	}
}

 

삼항 연산자로 짝수 홀수 판별하기

import java.util.Scanner;

public class EvenOddTernary {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 사용자로부터 숫자 입력받기
        System.out.print("숫자를 입력하세요: ");
        int number = scanner.nextInt();

        // 삼항 연산자로 짝수/홀수 판별
        String result = (number % 2 == 0) ? "짝수" : "홀수";

        // 결과 출력
        System.out.println("입력한 숫자 " + number + "는(은) " + result + "입니다.");

        scanner.close();
    }
}

 

성적 문제

 

package if문;

import java.util.Scanner;

/*
 1. 성적을 입력받는다
 2. 90보다 크다면 A
	80보다 크다면 B
	70보다 크다면 C
	60보다 크다면 D
	그외는       F
*/
public class if3_성적 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("성적을 입력하세요."); 
		int grade = sc.nextInt();
		
		if(grade >=90 ) {
			System.out.println("A");
		}else if(grade >=80 && grade<90)
		{
			System.out.println("B");
		}else if(grade >=70 && grade<80)
		{
			System.out.println("C");
		}else if(grade >=60 && grade<70)
		{
			System.out.println("D");
		}
		else
			System.out.println("F");
		
	}
	
}

🚀 Switch문을 사용한 성적 평가 프로그램 완성

📚 1. 요구사항

  • 사용자로부터 점수를 입력받습니다.
  • 점수를 90100, 8089, 70~79 등의 범위로 나누어 평가합니다.
  • 평가 결과를 출력합니다.
  • 잘못된 점수가 입력되면 **"유효하지 않은 점수입니다."**를 출력합니다.

2. 완성된 코드

package switch문;

import java.util.Scanner;

public class sw2성적 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("점수를 입력하세요: ");        
        double score = sc.nextDouble();
        
        // 점수를 10으로 나누어 정수로 변환
        int num = (int) score / 10;
        
        switch (num) {
            case 10: // 100점 처리
            case 9:
                System.out.println("등급: A");
                break;
            case 8:
                System.out.println("등급: B");
                break;
            case 7:
                System.out.println("등급: C");
                break;
            case 6:
                System.out.println("등급: D");
                break;
            default:
                if (score >= 0 && score < 60) {
                    System.out.println("등급: F");
                } else {
                    System.out.println("유효하지 않은 점수입니다.");
                }
                break;
        }
        
        sc.close();
    }
}

3. 코드 설명

  1. 점수 입력:
    • 사용자로부터 점수를 입력받습니다.
  2. 점수 변환:
    • score를 int로 형변환하고 10으로 나누어 십의 자리 숫자로 나눕니다.
  3. Switch문으로 등급 판별:
    • 10, 9: A 등급
    • 8: B 등급
    • 7: C 등급
    • 6: D 등급
    • 그 외:
      • 60 미만: F 등급
      • 잘못된 점수: 유효하지 않은 점수입니다.
  4. 리소스 해제:
    • sc.close()로 Scanner를 종료합니다.

4. 실행 예시

입력:

 
점수를 입력하세요: 85

출력:

 
등급: B

입력:

 
점수를 입력하세요: 72

출력:

 
등급: C

입력:

 
점수를 입력하세요: 50

출력:

 
등급: F

입력:

 
점수를 입력하세요: 105

출력:

 
유효하지 않은 점수입니다.

5. 학습 포인트

  1. Switch문 활용:
    • switch-case로 범위를 처리하는 방법을 학습합니다.
  2. 형 변환:
    • double → int로 형변환을 통해 switch문에서 활용합니다.
  3. 예외 처리:
    • 잘못된 점수 입력에 대한 검증을 추가합니다.

6. 개선 아이디어

  • 등급에 대한 추가적인 메시지 (예: "우수한 성적입니다!")
  • 반복문(while)을 사용하여 여러 번 점수를 입력받을 수 있도록 개선

더 궁금한 부분이나 추가 기능을 구현하고 싶다면 말씀해주세요! 😊🚀

LIST