
- while문
while (조건식) {
조건식의 결과가 true인 동안 반복할 문장;
...
}
while문을 이용해 1 ~ 100까지의 짝수의 총합 구하기!
public class WhileSum {
public static void main(String[] args) {
/* 1~100까지의 짝수의 총합*/
int sum = 0;
int i = 0;
while(i <= 100) {
sum += i;
i += 2;
}
System.out.println("1~100까지의 짝수의 총합 : " + sum);
}
}
짝수이기 때문에 i에다가 +2를 해준다.
- for문
for (변수의 초기화; 조건식; 증감식) {
조건식이 true인 동안 반복할 문장;
...
}
- do ~ while 문
while문과 동일하지만 첫 반복이 false인 경우 while문은 반복하지 않는다.
그렇지만 do ~ while문의 경우, 일단 한 번 문장을 실행한 뒤에 조건식을 판단한다.
do {
문장..
} while (조건식);
- continue 문
반복이 진행되는 도중 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 시작된다.
for (변수; 조건식; 증감식) {
....1
....2
if(조건식) continue;
....3
}
if 조건식이 true이면, 반복 중에 continue문을 만나기 때문에... 3을 진행하지 않고, 다음 반복을 시작한다.
continue문으로 3,6,9프로그램 만들기!
public class Continue1 {
public static void main(String[] args) {
for(int i = 1; i <= 100; i++) {
if( i % 3 == 0) {
System.out.print("👏 ");
continue;
}
System.out.print(i + " ");
}
}
}
i가 3으로 나누었을 때 나머지가 0인 경우가 3의 배수이다. 조건에 맞을 경우 박수를 출력하고 continue를 이용해 숫자 출력을 뛰어넘고 다음 반복을 진행한다.
- break문
switch문 또는 반복문을 벗어 날 때 사용한다.
for(변수; 조건식; 증감식) {
...
...
if(조건식) break;
...
}
✔ Math 클래스
자바에서 사용되는 수학 관련한 기능을 담고 있는 클래스를 의미한다.
random() : 임의의 실수 ( 0 ~ 0.99999)를 출력
반환값의 자료형 타입 앞에 static이 붙어 있기 때문에 객체를 만들 필요가 없다.
double rn = Math.random();
- 중첩 반복문
2개 이상의 반복문이 겹쳐져 있는 형태
while(조건식1) {
조건식1이 true인 동안 반복할 문장;
...
whlie(조건식2) {
조건식2가 true인 동안 반복할 문장;
...
}
for (변수; 조건식1; 증감식) {
조건식1이 true인 동안 반복할 문장;
...
for(변수; 조건식2; 증감식) {
조건식2이 true인 동안 반복할 문장;
...
}
}
while문을 이용해 구구단 출력하기!
public class Gogodan {
public static void main(String[] args) {
int i = 1;
int j = 1;
while(i <= 9) {
System.out.println(i + "단");
while(j <= 9) {
System.out.println(i + " * " + j + " = " + i*j) ;
j++;
}
j = 1;
i++;
}
}
}
1단부터 9단까지 잘 출력된것을 확인할 수 있다. while문은 for문과 다른 게 초기화가 없기 때문에 초기화를 위해 j = 1;이라는 문장을 넣어주는 것이다.
개복치 출력하기!
/*
'🐠'를 사용하여 아래와 같이 출력
1.🐠 🐠 🐠 🐠 🐠
*/
for(int i = 0; i < 5; i++) {
System.out.print("🐠 ");
}
System.out.println();
System.out.println("--------------------------");
/* 2.🐠 🐠 🐠 🐠 🐠
🐠 🐠 🐠 🐠 🐠
🐠 🐠 🐠 🐠 🐠
🐠 🐠 🐠 🐠 🐠
🐠 🐠 🐠 🐠 🐠
*/
for (int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
System.out.print("🐠 ");
}
System.out.println();
}
System.out.println();
System.out.println("--------------------------");
/* 3. 🐠 🐠 🐠 🐠 🐠
🐠 🐠 🐠 🐠
🐠 🐠 🐠
🐠 🐠
🐠
*/
for (int i = 5; i > 0; i--) {
for(int j = 0; j < i; j++) {
System.out.print("🐠 ");
}
System.out.println();
}
System.out.println();
System.out.println("--------------------------");
위의 5x5에서 j의 범위와 i의 조건들을 바꾸면 출력할 수 있다. 먼저 j에서 개복치는 출력하기때문에 5개를 찍기 위해서는 j의 for문이 5번 돌아야 한다. 그리고 두 번째 줄의 개복치들은 4개만 찍혀야 되기 때문에 j는 4번돌아야한다.
따라서 i의 시작을 5로 하고, i의 값을 하나씩 줄어들게한다. 그리고 j의 범위는 i로 제한하면 하나씩 줄어드는 개복치들을 볼 수 있다.
/*
4. 🐠
🐠 🐠
🐠 🐠 🐠
🐠 🐠 🐠 🐠
🐠 🐠 🐠 🐠 🐠
* */
for (int i = 0; i < 5; i++) {
for(int j = 0; j <= i; j++) {
System.out.print("🐠 ");
}
System.out.println();
}
System.out.println();
System.out.println("--------------------------");
3번째와는 다르게 시작이 한 개이기 때문에 i, j의 초기화를 0으로 동일하게 한다. i의 첫 번째 반복에서 j도 하나의 개복치만을 출력해야 되기 때문에 j의 범위를 i로 조건을 주면 위와 같은 개복치들을 볼 수 있다.
- 배열 (Array)
변수는 한 개의 데이터만 저장하기 때문에 데이터의 수가 많아지면 그만큼 많은 변수가 필요하다.
동일한 데이터 타입의 변수를 연속적으로 생성할 수 있다.
인덱스를 통하여 데이터에 접근이 가능하다.
- 배열의 선언
데이터타입[] 배열이름;
데이터타입 배열이름[];
arr = new int[10];
- 배열의 메모리 할당
배열이름 = new 데이터타입[요소의 갯수];
arr = new int[10];
- 배열의 선언 및 할당
데이터타입[] 배열명 = new 데이터타입[요소의 갯수];
int[] arr = new int[10];
- 배열의 초기화
배열명[인덱스번호] = 값;
arr[0] = 10;
입력받은 값 배열에 할당하고, 최댓값, 최솟값 출력하기!
import java.util.Scanner;
public class Array1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("몇 개의 값을 저장할까요? ");
int num = sc.nextInt();
int[] arr = new int[num];
for(int i =0; i < arr.length; i++) {
System.out.print((i+1) + "번 인덱스에 넣을 값을 입력하세요 : ");
arr[i] = sc.nextInt();
}
int max = arr[0];
int min = arr[0];
// 최대값 최소값 구하기
for(int i = 0; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
} else if (min > arr[i]) {
min = arr[i];
}
}
System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
}
}
max와 min이라는 변수를 만들고 배열의 첫 인덱스 값을 넣어준다. 그리고 if문과 for문을 이용해 반복해서 배열의 값들과 max, min 값을 비교한다.
max의 경우, 첫 번째 인덱스와 차례로 오는 다음 인덱스들과 비교해서 max가 다음으로 오는 인덱스 값 보다 작으면 그 값을 max에 대입해주는 것을 반복한다.
min의 경우는 반대로 min이 다음으로 오는 인덱스의 값보다 크다면 그 값을 min의 대입해주는 것을 반복으로 한다.
그렇게 하면 최댓값과 최솟값을 구할 수 있다.
과제 1. 주사위 게임 만들기!
👀 과제
1. 주사위 게임 만들기
1) 랜덤한 주사위 값을 뽑아 입력한 값과 일치하는지 확인
2) 값의 범위는 1 ~ 6까지로 함
3) 값을 맞출 때까지 프로그램을 진행
주사위를 던진다.
값을 입력하세요. 3
틀렸습니다 값은 1 입니다.
주사위를 던집니다.
값을 입력하세요. 2
맞췄습니다. 프로그램을 종료합니다.
맞출 때 까지 던지고 입력, 맞추면 종료
import java.util.Scanner;
public class Assigment1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int rn = (int)(Math.random()* 6 + 1);// 랜덤한 값 1~6까지
System.out.println("주사위를 던진다.");
System.out.print("값을 입력하세요 : ");
int val = sc.nextInt();
if (val == rn) {
System.out.println("맞췄습니다. 프로그램을 종료합니다.");
break;
} else {
System.out.println("틀렸습니다. 값은 "+rn+" 입니다.");
}
}
}
}
코드에서 random() 메서드의 경우, double 값으로 나오며, 0~0.9999까지의 범위이다. 따라서 1~6까지 범위를 맞추기 위해서 *6+1을 해준다.
그리고 맞출 때까지 반복해야 되기 때문에 while문의 조건을 true로 주고 맞출 경우에 break;로 반복문을 나오게 조건을 준다.
과제 2. 가위바위보 게임 만들기!
1) 컴퓨터와 가위바위보 게임
2) 값의 범위는 1 ~ 3까지로 함(가위:1, 바위:2, 보:3)
(문자비교를 해도됨)
3) 값을 맞출때까지 프로그램을 진행
가위, 바위, 보 중 하나를 선택하세요. 가위
컴퓨터 : 바위
나 : 가위
졌습니다!
가위, 바위, 보 중 하나를 선택하세요. 가위
컴퓨터 : 보
나 : 가위
이겼습니다! 프로그램을 종료합니다.
import java.util.Scanner;
public class Assignment2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int rn = (int)(Math.random() * 3 + 1);
System.out.print("가위, 바위, 보 중 하나를 선택하세요.");
String val = sc.next();
String result = "";
if(rn == 1) {
result = "가위";
} else if (rn == 2) {
result ="바위";
} else {
result = "보";
}
if(val.equals("가위") && result.equals("보") || val.equals("바위") && result.equals("가위")
|| val.equals("보") && result.equals("바")) {
System.out.println("컴퓨터 : " + result);
System.out.println("나 : " + val);
System.out.println("이겼습니다! 프로그램을 종료합니다.");
break;
} else if(val.equals(result)) {
System.out.println("컴퓨터 : " + result);
System.out.println("나 : " + val);
System.out.println("비겼습니다!");
} else {
System.out.println("컴퓨터 : " + result);
System.out.println("나 : " + val);
System.out.println("졌습니다!");
}
}
}
}
위 코드의 경우, 숫자로 입력받아도 되지만 나는 문자열로 받았다. 그래서 random() 메서드로 1~3 범위까지로 정하고 1은 "가위" , 2는 "바위" 3은 "보"로 조건을 주었다. 그리고 이기는 경우의 수에 맞춰 조건을 주고, 이길 경우에만 반복문을 나가게끔 break;을 이용하였다.
'국비 > JAVA' 카테고리의 다른 글
DAY 05 : 메소드, 객체지향 프로그래밍, 클래스, 생성자 (0) | 2022.10.04 |
---|---|
DAY 04 : 2차원 배열, 향상된 for문, String클래스 (1) | 2022.10.03 |
DAY 02 : 타입 변환, Scanner, String 클래스, 제어문 (0) | 2022.09.28 |
DAY 01 : 연산자 (0) | 2022.09.28 |
DAY 01 : JAVA, 주석, 변수 (1) | 2022.09.23 |