For문 추가
-초기식과 증감식은 ' , ' 기호를 사용하여 나열 작성 가능
-조건식은 &&, ||로 연결
for(int i = 1, j = 5; i <= 3; i++, j--) { //실제 반복은 i만 반복하는 것임
System.out.println("i =" + i + ", j = " + j);
}
//i =1, j = 5
//i =2, j = 4
//i =3, j = 3
-초기식, 조건식, 증감식은 생략 가능 -> 조건식이 생략된 경우 무조건 참으로 처리
int i = 1; //for 구문에 상관없이 계속 존재
for(; i <=4 ; i++) { // 초기식 생략 (;는 생략 불가. 2개 필수)
System.out.print(i+"\t");
} //i 변수에 [5]가 저장된 경우 반복문 종료
// i = 5; (i가 소멸되지 않았기 때문에 i에 5가 저장되어 있음)
for(;i >= 1 ; i --) { // 초기식 생략
System.out.print(i+"\t");
}
// 출력: 1 2 3 4 5 4 3 2 1
- 조건식이 생략된 경우 무조건 참으로 처리 -> 무한루프
for(;;) { //초기식, 조건식, 증감식 생략
System.out.println("무한 반복되어 실행되는 명령");
}
//데드코드 -> 무한루프 다음에 오는 코드. 실행 불가.
System.out.println("==============================================================");
이중 for문
바깥쪽의 for문은 다음 반복으로 넘어가기 위해서는 안쪽에 있는 수행할 문장들을 모두 마쳐야 한다.
예제1) A나라 >> 섬으로 가는 이동방법 3가지, 섬 >> B나라로 가는 방법 4가지일 경우, 이동방법의 갯수 구하기
int cnt = 0; // 이동방법의 갯수를 저장하기 위한 변수
for(int i = 1; i <=3 ; i++) { //A나라 >> 섬 - 반복문
for(int j = 1 ;j <=4 ; j++) { //섬 >> B나라 - 반복문
cnt++;
}
}
System.out.println("이동방법의 갯수 = " + cnt);
//이동방법의 갯수 = 12
예제2)
★★★★★★★
★★★★★★★
★★★★★★★
★★★★★★★ (4행 7열) 출력
for(int i = 1 ; i <=4 ; i++) { //행(Row)을 처리하기 위한 반복문
for(int j = 1; j <=7 ; j++) { //열(Column)을 처리하기 위한 반복문
System.out.print("★");
}
System.out.println();
예제3)
2*1=2 3*1=3 ... 8*1=8 9*1 = 9
2*2=4 3*2=6 ... 8*2=16 9*2 = 18
...
2*8=16 3*8=24 ... 8*8=64 9*8 = 72
2*9=18 3*9=27 ... 8*9=72 9*9 = 81 출력
for(int i = 1; i <=9 ; i++) {
for(int j = 2; j <= 9; j++) {
System.out.print(j + "*" + i + "=" + (i*j) + "\t");
}
System.out.println();
예제4)
★
★★
★★★
★★★★
★★★★★
//★ i=1 별=1
//★★ i=2 별=2
//★★★ i=3 별=3
//★★★★ i=4 별=4
//★★★★★ i=5 별=5
for(int i = 1 ; i <=5 ; i++) { //행
for(int j = 1; j <= i ; j++) { //열
System.out.print("★");
}
System.out.println();
}
예제5-1)
★★★★★
★★★★
★★★
★★
★
//★★★★★ i=1 별=5
//★★★★ i=2 별=4
//★★★ i=3 별=3
//★★ i=4 별=2
//★ i=5 별=1
for(int i = 1; i <=5 ; i++) {
for(int j = 1; j <= (6-i) ; j++) {
System.out.print("★");
}
System.out.println();
}
예제5-2)
★★★★★
★★★★
★★★
★★
★
//★★★★★ i=5 별=5
//★★★★ i=4 별=4
//★★★ i=3 별=3
//★★ i=2 별=2
//★ i=1 별=1
for(int i = 5; i >= 1 ; i--) {
for(int j = 1; j <= i ; j++) {
System.out.print("★");
}
System.out.println();
}
예제6-1)
☆☆☆☆★
☆☆☆★★
☆☆★★★
☆★★★★
★★★★★
//☆☆☆☆★ i=1 흰별 = 4 검은별=1
//☆☆☆★★ i=2 흰별 = 3 검은별=2
//☆☆★★★ i=3 흰별 = 2 검은별=3
//☆★★★★ i=4 흰별 = 1 검은별=4
//★★★★★ i=5 흰별 = 0 검은별=5
for(int i = 1 ; i <=5 ; i++) {
for(int j = 1; j <= (5-i) ; j++) {
System.out.print("☆");
}
for(int j = 1; j <= i ; j++) {
System.out.print("★");
}
System.out.println();
}
예제6-2)
☆☆☆☆★
☆☆☆★★
☆☆★★★
☆★★★★
★★★★★
//1 2 3 4 5 >> j
//☆☆☆☆★ i=1
//☆☆☆★★ i=2
//☆☆★★★ i=3
//☆★★★★ i=4
//★★★★★ i=5
for(int i = 1 ; i <= 5 ; i++) {
for(int j = 1; j <= 5 ; j++) {
if(i + j < 6) {
System.out.print("☆");
} else {
System.out.print("★");}
}
System.out.println();
}
While문
: 조건에 의해 명령을 반복 실행
=> 반복의 횟수가 명확하지 않은 경우 사용하는 반복문
형식) while(조건식) { 명령; 명령; ... }
- 조건식의 결과가 참인 경우 명령을 반복 실행하고 거짓인 경우 반복문 종료
- 조건식 생략 불가능
- 블럭 내부에 작성된 명령을 0번 이상 실행
do while문 (변형된 while문)
형식) do{ 명령; 명령; ... } while(조건식);
- 블럭 내부에 작성된 명령을 1번 이상 실행
예제1) "Java Programming"를 화면에 5번 출력하는 프로그램을 작성
int i = 1;
while(i <= 5) {
System.out.println("Java Programming");
i++;
}
예제2) 1~100 범위의 정수들의 합계를 계산하여 출력하는 프로그램 작성
do while문 활용한 풀이
int j = 1, tot = 0;
do {
tot += j;
j++;
} while (j <= 100);
System.out.println("1~100범위의 정수들의 합계 = " + tot);
//1~100범위의 정수들의 합계 = 5050
예제3) A4 용지를 반으로 계속 접어 펼쳤을 경우 사각형 모양의 갯수가 500개 이상이 만들어 지려면
몇 번 접어야 되는지를 계산하여 출력하는 프로그램 작성
int cnt = 0, gae = 1;// cnt : 접는 횟수, gae : 사각형 모양의 갯수
//사각형 모양의 갯수가 500개 미만인 경우 반복 처리하고 500개 이상인 경우 반복문 종료
while (gae < 500) { //A4 용지를 반으로 계속 접기 위한 행위를 제공하는 반복문
cnt++; //접는 횟수는 1씩 증가
gae *= 2; //사각형 모양의 갯수는 2배씩 증가
}
System.out.println(cnt + "번 접으면 " + gae + "개의 사각형이 만들어집니다.");
//9번 접으면 512개의 사각형이 만들어집니다.
예제 4) 1~X 범위의 정수들의 합계가 300 이상이 만들어지려면 X가 얼마인지 계산하여 출력하는 프로그램 작성
- 1+2+3+...+ X >= 300
int x = 0, sum = 0; // x: 1씩 증가되는 정수값 저장, sum : 누적 결과(합계) 저장
while(sum < 300) {
x++;
sum += x;
}
System.out.println("1~X" + x + "범위의 정수들의 합계 = " + sum);
//1~X24범위의 정수들의 합계 = 300
break
: switch 구문 또는 반복문을 강제로 종료하기 위해 사용하는 제어문
예제1)
//반복문은 조건식의 결과가 거짓인 경우 반복문 종료
for(int i = 1; i <= 5; i ++) {
if(i == 3) break; //if 구문의 조건이 참인 경우 break 구문을 이용하여 반복문 종료
System.out.print(i + "\t");
}
System.out.println();
//1 2
예제2)
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 5; j++) {
if(j == 3) break; //for(int j = 1; j <= 5; j++) 반복문만 종료
System.out.println("i = " + i + ", j = " + j);
}
}
/*
i = 1, j = 1
i = 1, j = 2
i = 2, j = 1
i = 2, j = 2
i = 3, j = 1
i = 3, j = 2
i = 4, j = 1
i = 4, j = 2
i = 5, j = 1
i = 5, j = 2
*/
반복문 선언시 반복문을 구분하기 위한 식별자(라벨명) 선언 가능
형식) 라벨명 : 반복문
예제)
loop:
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 5; j++) {
//break 라벨명 : 라벨명으로 지정된 반복문을 종료
if(j == 3) break loop; //for(int i = 1; i <= 5; i++) 반복문 종료 (전체 for문 종료)
System.out.println("i = " + i + ", j = " + j);
}
}
// i = 1, j = 1
// i = 1, j = 2
continue
: 반복문에서 명령을 처음부터 다시 실행하기 위해 사용하는 제어문
-> 반복문에서 continue 명령 하단에 작성된 명령을 실행하지 않고 처음부터 다시 실행할 경우 사용
예제1)
for(int i = 1; i <= 5; i++) {
if( i == 3) continue; //i가 3일 때, 출력 명령 건너 뛰고 실행하지 않음
System.out.print(i + "\t");
}
//1 2 4 5
예제2)
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 5; j++) {
if(j == 3) continue; //for(int j = 1; j <= 5; j++) 반복문 재실행
//j = 3 인 경우 출력되지 않고 건너 뛴다
System.out.println("i = " + i + ", j = " + j);
}
}
/*
i = 1, j = 1
i = 1, j = 2
i = 1, j = 4
i = 1, j = 5
i = 2, j = 1
i = 2, j = 2
i = 2, j = 4
i = 2, j = 5
i = 3, j = 1
i = 3, j = 2
i = 3, j = 4
i = 3, j = 5
i = 4, j = 1
i = 4, j = 2
i = 4, j = 4
i = 4, j = 5
i = 5, j = 1
i = 5, j = 2
i = 5, j = 4
i = 5, j = 5
*/
예제3)
loop:
for(int i = 1; i <= 5; i++) {
for(int j= 1;j <= 5; j++) {
if(j == 3) continue loop; //for(int i=1;i<=5;i++) 반복문 재실행
System.out.println("i = " + i + ", j = " + j);
}
/*
i = 1, j = 1
i = 1, j = 2
i = 2, j = 1
i = 2, j = 2
i = 3, j = 1
i = 3, j = 2
i = 4, j = 1
i = 4, j = 2
i = 5, j = 1
i = 5, j = 2
*/
Scanner Class
import : 다른 패키지의 클래스를 불러오기 위해 사용하는 키워드
import java.util.Scanner;
-> Import 통해 Scanner가 프로그램에 참조될 수 있도록 만들어준다
-System.out : 프로그램의 값을 출력스트림을 사용하여 화면에 전달하는 기능을 제공하는 객체
-System.in : 키보드로부터 입력된 값을 입력스트림을 사용하여 프로그램에 전달하는 기능을 제공하는 객체
-Scanner 클래스 : 입력스트림(키보드 -System.in, 파일 등)을 전달받아 원하는 자료형으로
값을 입력받기 위한 기능(메소드)을 제공하는 클래스
-> Scanner 객체를 생성하여 참조변수에 저장
-> 참조변수를 사용하여 참조변수에 저장된 객체의 메소드를 호출하여 필요한 기능 구현
-Scanner.nextLine() : 입력값을 문자열로 변환하여 반환하는 메소드
-> 키보드로 입력된 값을 문자열로 반환받아 변수에 저장
-> 키보드 입력값이 없는 경우 프로그램의 흐름(스레드)이 일시 중지
-> 키보드로 값을 입력한 후 엔터(Enter)를 입력하면 프로그램의 흐름 재실행
-Scanner.nextInt() : 입력값을 정수값으로 변환하여 반환하는 메소드
-> 키보드로 입력된 값을 정수값으로 반환받아 변수에 저장
-> 키보드로 입력된 값이 정수값이 아닌 경우 예외(Exception) 발생 - 프로그램 강제 종료
예제) 사용자로부터 키보드로 이름과 나이를 입력받아 화면에 출력하는 프로그램 작성
package basic;
import java.util.Scanner; //Import 통해 Scanner가 프로그램에 참조될 수 있도록 만들어준다
public class ScannerApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //Scanner 클래스
System.out.print("이름 입력 >> ");
String name = scanner.nextLine(); //scanner.nextLine()
System.out.print("나이 입력 >> ");
int age = scanner.nextInt(); //scanner.nextInt()
System.out.println("[결과]" + name + "님의 나이는 " + age + "살입니다.");
//Scanner.cloes(); : Scanner 객체가 사용한 입력스트림을 제거하는 메소드
scanner.close();
}
}
예제2) 키보드로 정수를 입력받아 학점을 계산하여 출력하는 프로그램 작성
=> 100 ~ 90 : A, 89 ~ 80 : B, 79 ~ 70 : C, 69 ~ 60 : D, 59 ~ 0 : F
=> 키보드로 입력된 점수가 0 ~ 100 범위의 정수값이 아닌 경우 에러 메세지 출력 후 재입력 되도록 작성
예제2-1) While문 사용
package basic;
import java.util.Scanner;
public class InputCheckApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//반복문의 조건식이 무조건 참이 되도록 비정상적인 값을 초기값으로 저장
int score = -1; //블럭 밖의 변수는 소멸되기 때문에 미리 변수를 선언
//비정상적인 입력값인 경우 반복문 실행하고 정상적인 값이 입력된 경우 반복문 종료
while(score < 0 || score > 100) { //(반복의 횟수가 정해져 있지 않기 때문에 while문 사용)
System.out.print("점수 입력[0~100] >> ");
score = scanner.nextInt();
if(score < 0 || score > 100) {
System.out.println("[에러]점수는 0~100 범위의 정수값만 입력 가능합니다.");
}
}
String grade = "";
switch(score/10) {
case 10:
case 9: grade = "A"; break;
case 8: grade = "B"; break;
case 7: grade = "C"; break;
case 6: grade = "D"; break;
default: grade = "F";
}
System.out.println("[결과]" + score + "점 = " + grade + "학점");
scanner.close();
}
}
예제2-2) Do while문 사용 - 초기값 줄 필요 X
public class InputCheckApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score; //초기값 X
do {
System.out.print("점수 입력[0~100] >> ");
score = scanner.nextInt();
if(score < 0 || score > 100) {
System.out.println("[에러]점수는 0~100 범위의 정수값만 입력 가능합니다.");
}
} while (score < 0 || score > 100);
String grade = "";
switch(score/10) {
case 10:
case 9: grade = "A"; break;
case 8: grade = "B"; break;
case 7: grade = "C"; break;
case 6: grade = "D"; break;
default: grade = "F";
}
System.out.println("[결과]" + score + "점 = " + grade + "학점");
scanner.close();
}
}
예제2-3)
조건식 대신 [true]를 사용 - 무한루프 이용
ackage basic;
import java.util.Scanner;
public class InputCheckApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score;
while(true) { //조건식 대신 [true]를 사용하면 무조건 참 - 무한루프
System.out.print("점수 입력[0~100] >> ");
score = scanner.nextInt();
//입력값이 정상적인 값인 반복문 종료
if(score >= 0 && score <= 100) break;
//비정상적인 값이 입력된 경우 에러 메시지 출력 후 반복문 재실행
System.out.println("[에러]점수는 0~100 범위의 정수값만 입력 가능합니다.");
}
String grade = "";
switch(score/10) {
case 10:
case 9: grade = "A"; break;
case 8: grade = "B"; break;
case 7: grade = "C"; break;
case 6: grade = "D"; break;
default: grade = "F";
}
System.out.println("[결과]" + score + "점 = " + grade + "학점");
scanner.close();
}
}
'학원 > 복기' 카테고리의 다른 글
0405 - 객체 중심 프로그래밍(OOP), 메소드 선언 및 호출, return 키워드 (0) | 2023.04.05 |
---|---|
0404 - 난수 출력, 가위바위보 게임, Java 자료형, Java 메모리 영역, 배열, 향상된 for문, 로또 프로그램, 2차원 배열 (0) | 2023.04.04 |
0331 - 제어문(IF문, Switch문, For문), 전역변수, Debug Perspctive (0) | 2023.04.01 |
0330 - 문자형 리터럴, 논리형 리터럴, 자료형 변환, 연산자 (0) | 2023.03.30 |
0329 - JDK, 깃허브, 자료형, 변수 (0) | 2023.03.29 |