SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java class 2 - 논리연산자, 대입연산자, 논리시프트, 구구단, 짝수단, 배열, 로또, 동치연산자(가위바위보) 본문

Java

[Eclips] Java class 2 - 논리연산자, 대입연산자, 논리시프트, 구구단, 짝수단, 배열, 로또, 동치연산자(가위바위보)

D_Aiden 2023. 12. 8. 09:07
728x90
반응형
SMALL

2023.12.8

## 논리연산자

값1, 값2 주어졌을때의 논리연산자 회로는 아래와 같음.

값1값2
falsefalse
falsetrue
truefalse
truetrue

논리연산자 답안

AND(&&)OR(||)XOR(^)NOT(!)
falsefalsefalse  
falsetruetruefalsetrue
falsetruetruetruefalse
truetruefalse  

 

## 대입연산자 축약

: 대입연산자는 오른쪽 피연산자의 연산결과왼쪽 변수에 대입하는 연산자.

일반표현축약표현
a = a+ba += b
a = a-ba -= b
a = a*ba *= b
a = a/ba /= b
a = a&ba &= b
a = a|ba |= b
a = a>>ba >>= b
a = a<<ba << = b
a = a>>>ba >>>= b

## 연산자 구분(등가비교연산자, 대입연산자)

등가비교연산자(==)는 두 값이 동일한지 참 or 거짓을 반환하는 연산자
대입연산자(=)는 오른쪽 값을 왼쪽에 대입하는 연산자

 

※ 논리시프트

<<< 숫자 , >>> 숫자는 숫자만큼 좌측으로 이동하라는 연산자

논리시프트

 
(연습1) 구구단 입력(숫자의 증가치 연습)
Step1. 키보드 입력을 선언해서 코딩
Step2. 키보드에 입력할 질문을 작성해 키보드로 입력.
Step3. 키보드를 불러온 변수를 int(32byte)의 변수로 선언.

for문 구성 ==> for( 변수의 시작을 선언; 변수의 조건; 변수의 증감) 형태
                    ex) for( a=1;   a<10;   a++);

//단을 하나 입력받아 그 단을 출력
		Scanner scan = new Scanner(System.in);  //키보드 선언
		System.out.print("단을 입력하세요: ");       // 키보드에 입력할 질문
		int dan=scan.nextInt();                 // scan을 dan이라는 변수선언
		
		for(int h=1; h<10; h++) {
			System.out.println(dan +"X" +h +"=" +(dan*h));
	     }

(연습2) 구구단을 출력하시오.
Step. for문으로 코딩
Step. for문 + for문으로 구성해서 구구단 앞자리를 코딩
Step. 마지막 for문에서 출력문을 코딩

	for (int g=2; g<10; g++) {
		System.out.println("======구분선======");
		for(int a=1; a<10; a++) {
		    System.out.println(g +"x" +a +"=" + (g*a));
			}
     }
======구분선======
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
======구분선======
3x1=3
3x2=6
3x3=9
3x4=12
3x5=15
3x6=18
3x7=21
3x8=24
3x9=27
======구분선======
4x1=4
4x2=8
4x3=12
4x4=16
4x5=20
4x6=24
4x7=28
4x8=32
4x9=36
======구분선======
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
======구분선======
6x1=6
6x2=12
6x3=18
6x4=24
6x5=30
6x6=36
6x7=42
6x8=48
6x9=54
======구분선======
7x1=7
7x2=14
7x3=21
7x4=28
7x5=35
7x6=42
7x7=49
7x8=56
7x9=63
======구분선======
8x1=8
8x2=16
8x3=24
8x4=32
8x5=40
8x6=48
8x7=56
8x8=64
8x9=72
======구분선======
9x1=9
9x2=18
9x3=27
9x4=36
9x5=45
9x6=54
9x7=63
9x8=72
9x9=81

코드 정리하는 단축키: ctrl + i

 
(연습3) 짝수단을 출력하시오.

// 짝수단을 출력하시오.
	for (int g=2; g<10; g+=2) {               // 증가치가 2배수씩 되도록 코딩
		System.out.println("======구분선======");
			for(int a=1; a<10; a++) {
			    System.out.println(g +"x" +a +"=" + (g*a));
            }
     }
======구분선======
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
======구분선======
4x1=4
4x2=8
4x3=12
4x4=16
4x5=20
4x6=24
4x7=28
4x8=32
4x9=36
======구분선======
6x1=6
6x2=12
6x3=18
6x4=24
6x5=30
6x6=36
6x7=42
6x8=48
6x9=54
======구분선======
8x1=8
8x2=16
8x3=24
8x4=32
8x5=40
8x6=48
8x7=56
8x8=64
8x9=72

 
(연습4) 짝수단을 가로로 출력하시오.
(hint) 고정될 숫자의 for문을 안쪽으로 넣어두고, 변경될 숫자의 for문을 밖으로 빼주면 됨.

// 짝수단을 가로로 출력하시오.
		for (int g=1; g<10; g+=1) {
               System.out.println();
               for(int a=2; a<10; a+=2) {
				System.out.print(a +"x" +g +"=" + (g*a) +"\t");
				}
         }
2x1=2	4x1=4	6x1=6	8x1=8	
2x2=4	4x2=8	6x2=12	8x2=16	
2x3=6	4x3=12	6x3=18	8x3=24	
2x4=8	4x4=16	6x4=24	8x4=32	
2x5=10	4x5=20	6x5=30	8x5=40	
2x6=12	4x6=24	6x6=36	8x6=48	
2x7=14	4x7=28	6x7=42	8x7=56	
2x8=16	4x8=32	6x8=48	8x8=64	
2x9=18	4x9=36	6x9=54	8x9=72

 

## 배열

: 같은 type(기본형 or 참조형)을 일괄 처리할 때 사용되는 객체.
   배열은 항상 for문과 같이 쓰임.

(형태) 타입+연산자([ ]) 를 사용.
               ex. int[ ] b = new int[ 4 ];             // 이런 형태이며, 선언된 변수에 연산자 값(4)에 new가 들어감.
                     int로 선언된 배열은 변수에 int변수.length 형태로 코딩

public class ArrayEx1 {
		public static void main(String[] args) {

// 배열의 방갯수에 맞게 숫자를 나열하시오.
		int [] garden = new int[10];
			for (int i=0; i<garden.length; i++) {   // 배열명.length 형태이며, 배열 10개로 잡은 방을 10이하까지 길이를 둠.
				garden [i]=i+1;
			}
				for (int i=0; i<garden.length; i++) {   // 배열크기를 0부터 시작해서 1개씩 증가하되, 변수(garden)에 길이를 잡아둠
				System.out.println(garden[i]);
			}
	}

}

 
배열은 args를 선언해도 답을 구할 수 있다.

public class ArrayEx2 {

	public static void main(String[] args) {

		for (int i=0; i<args.length; i++) {    // args 배열 수를 의미
			System.out.println(args[i]);
		}
		System.out.println(args[2].length());    //배열방.length()함수는 특정 배열방의 크기.
		
	}
}

경로: 우측 마우스 > RUS AS > Run Configirations > Arguments 클릭 > program arguments에 입력할 값 입력 > RUN

(추가) 명령프롬프트 내에서도 입력가능.

 

## 랜덤으로 숫자 추출

1. 교환 알고리즘(초기화)

1) A를 임시공간인 변수에 저장
2) B를 A에 저장(대입)
3) 임시저장된 변수(A값)를 B에 대입.
ex. temp = lotto [0];
      lotto[0] = lotto[bunhp];
      lotto[bunho]=temp; 

public class Lotto {

	public static void main(String[] args) {
		int[] lotto =new int[45];   // lotto로 45개의 방을 생성
		int temp=0;
		int bunho=0;
		
		for (int g=0; g<lotto.length; g++) {  	// num으로 lotto변수의 길이증감
			lotto[g]=g+1;                       // lotto의 num변수의 증감치
		}
		System.out.println("로또 당첨");

		for(int w=1; w<6; w++) {					// 5번 반복하기 위해선, for문을 만들어 추가
			for (int s=1; s<80000; s++){
				bunho = (int)(Math.random()*45);    // for문 안에서 random으로 호출
				temp = lotto[0];			    // 교환알고리즘 1) lotto변수를 a에 임시저장
				lotto[0]=lotto[bunho];          // 교환알고리즘 2) bunho를 lotto변수에 넣어서 0부터 대입
				lotto[bunho]=temp;				// 교환알고리즘 3) lotto변수에 넣은 bunho를 a에 대입
			}
			System.out.print(w+0 + "\t");
			for(int d=0; d<6; d++) {
			System.out.print(lotto[d] + "\t");
			}
			System.out.println();
			}
		}
로또 당첨
1	22	11	17	18	16	30	
2	34	16	28	1	35	26	
3	7	45	44	22	2	41	
4	35	9	25	34	12	21	
5	26	33	9	38	13	39

** 랜덤숫자의 동일 숫자의 반복을 줄이기 위해, 횟수를 늘려서 경우의 수를 줄이는 방법도 있음.

 

##동치 연산자

: 두 연산자가 동일한 객체를 참조 할때만 true를 반환

## 동치연산자의 종류

1. 동등 연산자: ==
2. 부등 연산자: !=
3. 일치 연산자: ===
4. 불일치 연산자: !==

(연습5) 남자 여자가 가위바위보를 했을때, 입력되는 값에 따라 여부를 코딩하시오(동치연산자 사용)

import java.util.Scanner;

public class eEqualsEx {

	public static void main(String[] args) {

// 동치연산자(가위바위보)
		
	Scanner sc=new Scanner(System.in);
		
	String man;
	String woman;
	System.out.println("남자:");	man = sc.nextLine();
	System.out.println("여자:");	woman = sc.nextLine();
	
	if(man.equals(woman)) {                    // equals는 선언된 man과 equals의 같은지를 체크가
		System.out.println("둘은 비겼습니다.");
	}else if(man.equals("바위") && woman.equals("가위") || 
			 man.equals("가위") && woman.equals("보") ||
			 man.equals("보") && woman.equals("바위")) {
		System.out.println("남자가 이겼습니다.");
	} else {
			System.out.println("여자가 이겼습니다.");
		}
	}
		
}

 
(연습5-1) 가위바위보가 비겼을때, 다시 가위바위보 하는 코딩
              (hint) do-while 반복문에 동치연산자를 넣어서 반복하는 형태

public class eEqualsEx {
	public static void main(String[] args) {
// 동치연산자(가위바위보)
		Scanner sc=new Scanner(System.in);

		String man;
		String woman;

		do {
		System.out.print("남자:");	man = sc.nextLine();
		System.out.print("여자:");	woman = sc.nextLine();
		if(man.equals(woman)) {                    // equals는 선언된 man과 equals의 같은지를 체크가
			System.out.println("둘은 비겼습니다.");
			System.out.println("비겼으니 다시 입력하세요.");
			continue;                       // 비겼을때 continue로 다시 do문으로 이동.
		} else if(man.equals("바위") && woman.equals("가위") || 
				man.equals("가위") && woman.equals("보") ||
				man.equals("보") && woman.equals("바위")) {
			System.out.println("남자가 이겼습니다.");
			break;                         // 이겼을때 break로 함수에서 벗어남.
		} else {
			System.out.println("여자가 이겼습니다.");
			break;                         // 이겼을때 break로 함수에서 벗어남.
			}
		}while(true);

		}
}
남자:바위
여자:바위
둘은 비겼습니다.
비겼으니 다시 입력하세요.
남자:가위
여자:바위
여자가 이겼습니다.

 

728x90
반응형
LIST