[자바] 입력과 연산자

또또·2024년 6월 1일

JAVA

목록 보기
2/2

입출력

입출력을 받기 위해 먼저 Scanner를 import하고 Scanner 객체를 생성해 시스템의 입력스트립을 연결
자바에서 입력은 Scanner.in의 next메서드 사용

next 메서드의 종류
next():
공백(스페이스, 탭, 줄바꿈 등)을 기준으로 단어 단위로 입력
nextLine():
줄바꿈 문자를 기준으로 한 줄 전체를 입력(정수입력 후 남아있는 계행문자 비우기 위해도 사용)
nextInt():
다음 토큰을 정수(int)읽음
nextDouble()
다음 토큰을 부동 소수점(double)으로 읽음
nextFloat()
다음 토큰을 부동 소수점(float)으로 읽음
nextLong()
다음 토큰을 긴 정수(long)로 읽음

출력은 System.out 객체의 println()을 사용

import java.util.Scanner;
public class Ex03input {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//입력하기 위한 도구: scanner
		Scanner sc = new Scanner(System.in);
		System.out.print("나이 입력: "); //줄바꿈x
		int age = sc.nextInt();
		System.out.println("나이는 :" +age + "살입니다."); //줄바꿈 O


	}

야구게임

컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다. (ex) 123, 759 ramdom으로 3개
이때 숫자가 중복되면 안됩니다
사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다.
컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다.
숫자의 값과 위치가 모두 일치하면 S
숫자의 값은 일치하지만 위치가 틀렸으면 B
기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다.
숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.

  • 내가 생각한 방법
  1. 입력
    먼저 Random을 사용해서 3자리 숫자를 만들어야 하는데 중복이 허용되면 안되기 떄문에 만들때 hashset으로 만든다
    hashset은 인덱스로 접근이 불가능 하기 때문에 나중에 하나씩 비교할때 그대로 integer로 바꿔줘야 한다
    맨 앞에 0이 들어갈 수 없으니 맨앞만 따로1~9까지 랜덤으로 뽑는다
    그 뒤는 for 문 돌려서 0~9까지의 랜덤 숫자를 넣는다

  2. 출력
    일단 3자리 숫자를 받은 다음에 각 숫자를 리스트에 한 숫자씩 저장한다
    for문을 돌려서 i번째가 같은지 확인하고 다리다면 contain으로 들어있는지 확인한다

import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;

public class baseball {
    /*
    To do : 과제 조건

컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다. (ex) 123, 759 ramdom으로 3개
이때 숫자가 중복되면 안됩니다
사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다.
컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다.
숫자의 값과 위치가 모두 일치하면 S
숫자의 값은 일치하지만 위치가 틀렸으면 B
기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다.
숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.
     */
    public static void main(String[] args) {
        Random random = new Random();
        Set<Integer> uniqueNumbers = new HashSet<>();
        uniqueNumbers.add( random.nextInt(9)+1);
        while(uniqueNumbers.size() <3) {
            uniqueNumbers.add(random.nextInt(10));
        }
        System.out.println(uniqueNumbers);
        Scanner sc = new Scanner(System.in);
        int [] inputList = new int[3];
        int trys =0;
        while (true) {
            System.out.println("숫자를 입력해 주세요");
            int answer = sc.nextInt();
            if (answer < 100 || answer>999) {
                System.out.println("3자리 숫자만 입력해주세요");
            }
            inputList[0] = answer/100;
            inputList[1] = (answer/10) %10;
            inputList[2] = answer% 10;
            //이제 이 둘이 같은지 확인 해야 한다
            Integer[] randomNumbers = uniqueNumbers.toArray(new Integer[3]);
            int strikes = 0;
            int balls = 0;
            for(int i=0; i<3;i++) {
                if(inputList[i] ==randomNumbers[i]) {
                    strikes++;
                }else if (uniqueNumbers.contains(inputList[i])) {
                    balls++;
                }
            }
            trys++;
            System.out.println("스트라이크: " +strikes +" 볼 :"+ balls);
            if(strikes==3) {
                System.out.println("정답!"+trys +"번만에 맞췄습니다");
                break;
            }else {
                System.out.println("다시한번 시도해주세요");
            }

        }
    }

}

연산자

  • 산출연산자와 비트 쉬프트연산자
    +, - , *, /, %, >>, <<
    앞의 산출 연산자는 말그대로 사칙 연산 담당
    비트연산자는 비트를 이동시키는 연산을 담당한다
    <<는 앞의 피연산자를 2진수로 바꾼 후 <<뒤의 숫자만큼 왼쪽으로 이동시킨다
    왼쪽으로 이동된만큼 오른쪽에는 0이 추가된다

'>>' 는 앞의 피연산자를 2진수로 바꾼 후 >>뒤의 숫자만큼 오른쪽으로 이동시킨다
오른쪽으로 이동된만큼 왼쪽에는 0이 추가된다

  • 비교연산자
    ==, >, <. >=, <=, !=

  • 논리연산자
    &&(and), ||(or), !

  • 대입연산자
    ++, --, =

  • 기타연산자
    (type) 형변환연산자
    instance of 피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/거짓을 응답
    삼항연산자

profile
내가 바라던 곳이야 흔들리지 않게 맘을 잡아

0개의 댓글