입출력을 받기 위해 먼저 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개를 모두 맞춘 경우, 게임을 종료합니다.
입력
먼저 Random을 사용해서 3자리 숫자를 만들어야 하는데 중복이 허용되면 안되기 떄문에 만들때 hashset으로 만든다
hashset은 인덱스로 접근이 불가능 하기 때문에 나중에 하나씩 비교할때 그대로 integer로 바꿔줘야 한다
맨 앞에 0이 들어갈 수 없으니 맨앞만 따로1~9까지 랜덤으로 뽑는다
그 뒤는 for 문 돌려서 0~9까지의 랜덤 숫자를 넣는다
출력
일단 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이 추가된다
비교연산자
==, >, <. >=, <=, !=
논리연산자
&&(and), ||(or), !
대입연산자
++, --, =
기타연산자
(type) 형변환연산자
instance of 피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/거짓을 응답
삼항연산자