210630 수
Chap02. 반복문
: 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
1. For
1) 식
2) 특징
1회전 : 초기식 확인 후 조건식 확인
조건식이 true면 문장 수행
조건식이 false면 수행하지 않음
2회전 : 증감식 연산 후 조건식 확인
조건식이 true면 문장 수행
조건식이 false면 수행하지 않음
*2회전 이상부터는 모두 2회전과 동일하고 조건식이 false가 나올 때까지 문장 수행
package com.kh.chap02.loop;
import java.util.Scanner;
public class A_For {
public void method1() {
// "안녕하세요" 10줄 출력
// for(초기식 ; 조건식 ; 증감식){
// }
for(int i = 1 ; i <= 10 ; i++) {
System.out.println("안녕하세요");
//후위나 전위 연산자나 여기서는 상관이 없다
//반복을 몇 회를 하는지가 중요하니까 정수값으로 하는 것
//w 초기식 : int i = 1
//=> int i라는 변수를 만들어 주고 i는 1부터 시작하겠다
//w 조건식 : i는 10까지만
//w 증감식 : 한 번 수행 시 기본값 -> 두 번째 기본값 + 1...
//즉, 1씩 증가 시키겠다. 1번 안녕하세요 2번 안녕하세요.. 10까지 안녕하세요
/* 답 :
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
*/
}
}
public void method2() {
//1부터 10까지의 숫자 출력
for(int i = 1 ; i <= 10 ; i++) {
System.out.println(i);
}
//for문을 벗어나면 i라는 변수를 사용할 수 없다
//System.out.println(i); => 이 줄에서는 사용 불가능
//입력 창에 문자열을 입력하면 => 문자열 반복
//i 변수를 넣으면 1~10 숫자 반복
/*1
2
3
4
5
6
7
8
9
10*/
}
public void method3() {
//10부터 1까지의 숫차를 출력
for(int i = 10 ; i >= 1 ; i--) {
//System.out.println(i);
System.out.print(i + " ");
}
//int i = 10, 10은 시작값이다, 횟수 아님
// 10부터 시작해서 1보다는 크게 반복하라
}
public void method4() {
//1~10 사이의 홀수 출력
//1, 3 ,5 ,7, 9
//식1
for(int i = 1 ; i <=10 ; i++) {
if(i % 2 == 1) {
System.out.print(i + " ");
}
}
System.out.println();
//식2
for(int i = 1 ; i < 10 ; i += 2) { //+= 되는 부분 복습하자
System.out.print(i + " ");
}
// 답 : 1 3 5 7 9 (둘 다)
}
public void method5() {
//1부터 10까지의 정수들의 합계
//1 + 2 + 3 + ... + 10 = ?
//합계를 기록할 변수를 만들어 준다.
int sum = 0;
for(int i = 1 ; i <= 10 ; i++) {
sum += i;
}
System.out.println("1부터 10까지의 합계 : " + sum);
}
//답 : 1부터 10까지의 합계 : 55
public void method6() {
//1부터 사용자가 입력한 수까지의 합계
Scanner sc = new Scanner(System.in);
System.out.print("정수 : ");
int num = sc.nextInt();
int sum = 0; //합계를 저장해 두는 곳 : 변수
for(int i = 1 ; i <= num ; i++) {
sum+= i;
}
System.out.println("1부터" + num + "까지의 합계 : " + sum);
//만약 마이너스를 입력하면 애초에 조건이 맞지 않아서 반복문이 실행되지 않는다
/*정수 : 10
1부터10까지의 합계 : 55*/
}
public void method7() {
//구구단 2단 출력하기
// 2 * 1 = 2
// 2 * 2 = 4
// 2 * 9 = 18
for(int i = 1 ; i < 10 ; i++ ) {
System.out.println("2 * " + i + " = " + (2*i));
}
}
public void method8() {
//사용자에게 입력 받은 수에 해당하는 구구단 출력하기
Scanner sc = new Scanner(System.in);
System.out.print("단 수를 입력하세요 : ");
int dan = sc.nextInt();
//일단 입력된 문자가 2 ~ 9 사이의 숫자가 맞는지 먼저 확인하고 싶을 때
if(dan <= 9 && dan >= 2) {
for(int i = 1 ; i < 10 ; i++) {
//System.out.println(dan + " * " + i + " = " + (i*dan));
System.out.printf("%d X %d = %d\n", dan, i, (dan*i));}
}else{
System.out.println("2 ~ 9사이의 값을 입력하셔야 합니다");
}
/*단 수를 입력하세요 : 3
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27*/
}
public void method9() {
//1부터 어떤 랜덤 값 (1~10 사이로 발생)까지의 합계 구하기
//java.lang.Math 클래스에서 제공하는 random메소드를 사용할거임
// ***java.lang 패키지는 import할 필요가 없음
// 컴파일러에 의해 import java.lang.*;이 생성됨
double random = Math.random();
System.out.println(random);
//Math.random() => 0.0 ~ 0.9999999999.... 까지의 랜덤한 숫자를 발생하는 메소드
//Math.random() 메소드를 정수 값으로 바꿔주는 방법
//메소드가 0~1(=0.999999999...)의 값이기 때문에 * 숫자 값을 해주면 된다
/*예) 10
* => 0 * 10 < 메소드 < 10이 되므로
* 0부터 9.99999값을 나타낼 수있다고 보면 됨
*
* Q. 1부터 시작하고 싶으면?
* +1 해주면 됨
* 예) 11(그니까 1부터 12까지라고 생각하면 됨)
* => 0 * 11 + 1 < 메소드 < 11 + 1
* => 1 < 메소드 < 12
*
* Q. 2부터 시작하고 싶으면?
* 예) 2부터 ~13까지 (그니까 2부터 14까지라고 생각하면 됨)
* => 0 * 12 + 2 < 메소드 < 12 + 2
*
이후 => 소수점 제거를 위해 int추가해서 강제형변환*/
int ran = (int)(random * 10 + 1);
System.out.println("1에서 10사이의 랜덤 값 : " + ran);
int sum = 0;
for(int i = 1 ; i <= ran; i++) {
sum += i;
}
System.out.println("1부터" + ran + "까지의 합 : " + sum);
}
public void method10() {
//랜덤 구구단
//2부터 9사이의 랜덤 값을 random 변수에 담고 random 단 출력
int ran = (int)(Math.random() * 8 + 2);
for(int i = 1 ; i < 10 ; i++) {
System.out.println(ran + " * " + i + " = " + (ran * i));
}
/*4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36*/
}
public void method11() {
//사용자에게 두개의 정수 값 입력 받아
//작은 수부터 큰 수까지의 합계 구하기
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 정수 : ");
int num1 = sc.nextInt();
System.out.print("두번째 정수 : ");
int num2 = sc.nextInt();
/*
int sum = 0;
for(int i = num1 ; i <= num2 ; i++) {
sum += i;
}
System.out.println("합계 : " + sum);
*/
//num1이 num2보다 작은 경우에는 반복문이 동작하지만
//num1이 num2보다 큰 경우에는 조건을 만족하지 못해서 반복문이 동작하지 않음
//작은 수가 초기식에 큰 수가 조건식에 들어가게끔 하려면?
int min = 0; //입력된 정수 중 작은 값을 저장할 변수
int max = 0; //입력된 정수 중 큰 값을 저장할 변수
if(num1 > num2) {
max = num1;
min = num2;
}else {
max = num2;
min = num1;
}
int sum = 0;
for(int i = min ; i <= max ; i++){
sum += i;
}
System.out.println(min + "부터 " + max + "까지의 합" + sum);
/*
* 첫번째 정수 : 3
두번째 정수 : 5
3부터 5까지의 합12*/
}
//-------------중첩 반복문-----------------
public void method12() {
//1부터 5까지 출력되는 문장을 3줄 출력하기
//1 2 3 4 5
//1 2 3 4 5
//1 2 3 4 5
for(int i = 1 ; i <= 3 ; i++) {//외부는 3번 반복
for(int j = 1 ; j <= 5 ; j++) {//내부는 5번 반복
System.out.println(j +" ");
}
System.out.println();
}
}
public void method13() {
//0시 0분 ~ 23시 59분 => 반복문 출력
// 시 -- 0시 ~ 23시까지
// 분 -- 0분 59분까지
for(int h = 0 ; h < 24 ; h++) {
System.out.println("====" + h + "시====");
for(int m = 0 ; m < 60 ; m++) {
System.out.println(h + "시" + m + "분" );
}
}
}
public void method14() {
//2단부터 9단까지 출력
//단 : 2~9단 => 외부 for문
//곱해지는 수 ; 1~9 => 내부 for문
for(int d = 2 ; d <=9 ; d++) {
System.out.println("====" + d + "단====");
for(int n = 1 ; n<=9 ; n++) {
System.out.println(d + " * " + n + " = " + (d*n));
}
}
}
public void method15() {
// ****
// ****
// ****
// ****
// ****
//행 지정 -> 외부, 열 지정 -> 내부
for(int i = 1 ; i <= 5; i++) {
for(int j = 1 ; j<= 4 ; j++) {
System.out.print("*");
}
System.out.println();
}
}
public void method16() {
//1***
//*2**
//**3*
//***4
for(int i = 1 ; i <= 4 ; i++){
for(int j = 1 ; j <= 4 ; j++) {
if(i == j) {
System.out.print(i);
}else{System.out.print("*");
}
}
System.out.println();
}
}
}
2. While
1) 식
2) 특징
조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후 true면 수행,
조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료
*{ } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
package com.kh.chap02.loop;
import java.util.Scanner;
public class B_While {
public void method1() {
/*while문
* [초기식]
* while(조건식){
* 실행할 코드;
* [증감식/분기문]
* }
*/
//안녕하세요 5줄 출력
int i = 1;
while(i <= 5) {
System.out.println("안녕하세요");
i++;
}
}
public void method2() {
//1부터 10까지 출력
int i = 1;
while(i <= 10) {
System.out.print(i + " ");
i++;
}
}
public void method3(){
//10부터 1까지 출력
int i = 10;
while(i >= 1) {
System.out.print( i+ " ");
i--;
}
}
public void method4() {
// 1 3 5 7 9 출력
int i = 1;
while(i < 10) {
System.out.print(i + " ");
i += 2;
}
}
public void method5(){
//1부터 랜덤 값(50~100 사이의 범위)까지의 합 구하기
int random = (int)(Math.random() * 51 + 50);
int sum = 0;
int i = 1;
while(i <= random) {
sum += i;
i++;
}
System.out.println("1부터 " + random + "까지의 합 : " + sum);
}
public void method6() {
//사용자에게 문자열을 입력 받아서
//각 인덱스 별 문자를 출력
//"apple"
//a
//p
//p
//l
//e => 문자열의 길이에 맞춰서 반복문을 통해 출력
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();
//문자열 길이를 알려면 문자열 변수.length()
System.out.println(str.length());
//string 안의 길이를 알려주는 메소드
int i = 0;
while(i < str.length()) { //문자열길이 -1까지 반복하는 조건
System.out.println(str.charAt(i));
i++;
}
}
public void method7() {
//문자열 입력 받고 그 문자열이 "exit"가 아닐 때까지 반복
//exit가 입력되면 종료
Scanner sc = new Scanner(System.in);
String str = "";
while(!str.equals("exit")) {
System.out.print("문자열을 입력해주세요 : ");
str = sc.nextLine();
System.out.println("입력 받은 문자열 : " + str);
}
System.out.println("exit 입력으로 종료 되었습니다.");
}
//==========중첩 반복문============
public void method8() {
// 2단부터 9단까지 while문 중첩해서 출력하기
int dan = 2;
while(dan <= 9) {
int su = 1; //내부 while에 대한 초기식은 외부 while 반복 할 때마다 수행되어야 한다.
System.out.println("===" + dan + "단===");
while(su <= 9) {
System.out.println(dan + " * " + su + " = " + (dan * su));
su++; //내부 while에 대한 증감식
}
dan++; //외부 while문에 대한 증감식(위지 중요!! 외우기)
}
}
public void method9() {
//for문에서 작성한 0시 0분 ~ 23시 59분 출력문 while문으로 변경
int h = 0;
while(h<=23) {
System.out.println("=======" + h + "시=======");
int m = 0;
while(m <= 59) {
System.out.println(h + "시" + m + "분");
m++;
}
h++;
}
//정해진 횟수만큼 반복하고자 할 때는 for문을 활용하는 것이 편리
//while문은 정해진 횟수가 아니라 조건을 판단하여 조건을 만족하는 동안 반복하는 상황에 사용
}
public void method10() {
//메뉴를 만들고 사용자가 프로그램 종료를 선택하기 전까지는
//계속해서 반복하는 프로그램 만들기
Scanner sc = new Scanner(System.in);
//while문의 조건식에 true를 넣으면 계속해서 반복하는 무한 루프를 만들 수 있음
while(true) { //true = 항상 이 while문은 이 조건을 만족한다는 의미
System.out.println("======메뉴======");
System.out.println("1. 안녕하세요 5번 출력하기");//method1
System.out.println("2. 1부터 10까지 출력하기");//method2
System.out.println("3. 10부터 1까지 출력하기");//method3
System.out.println("9. 프로그램 종료");
System.out.print("메뉴 선택 : ");
int menu = sc.nextInt();
switch(menu) {
case 1 : method1();break;
case 2 : method2();break;
case 3 : method3();break;
case 9 : System.out.println("프로그램을 종료합니다");return;
//return은 반복되던 것을 그만둔다는 메소드
default : System.out.println("잘못 입력하셨습니다");
}
System.out.println();
}
}
}
3. Do~While문
1) 식
2) 특징
do 안의 내용 먼저 실행
조건식 확인 후 true면 문장 수행, false면 종료
while 뒤에 ; 꼭 필요
*{ } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
*while과 do~while의 차이점 do~while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행
package com.kh.chap02.loop;
import java.util.Scanner;
public class C_DoWhile {
public void method1() {
/*dowhile문
*
* [초기식]
* do {
* 실행할 코드;
* [증감식/분기문]
* } while(조건식);
*
*/
int num = 0;
while(num != 0) {
System.out.println("while문 : " + num );
}
do {
System.out.println("do while문 : " + num);
} while(num != 0);
//do while이 while과 다른 점은 조건이 맞지 않아도
//반듯 ㅣ한 번은 수행 먼저 하고 조건 검사를 한다는 점
}
public void method2() {
//문자열 입력 받아 하나의 문자씩 출력하기
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();
int i = 0;
do {
System.out.println(str.charAt(i));
i++;
}while (i < str.length());
//빈 문자열을 입력했을 때는 오류가 나고,
//똑같은 현상을 while에 입력했을 때는 아무 문제가 발생하지 않는다.
//while문과 같이 charAt 호출 전 길이 값 확인 절차 필요
}
}
package com.kh.chap02.run;
import com.kh.chap02.loop.A_For;
import com.kh.chap02.loop.B_While;
public class Run {
public static void main(String[] args) {
A_For a = new A_For();
a.method15();
//B_While b = new B_While();
//b.method10();
}
}
'웹개발 수업 > JAVA' 카테고리의 다른 글
[Day +8] 배열1 (0) | 2021.07.11 |
---|---|
[Day +7]분기문 (0) | 2021.07.11 |
[Day +5]조건문 (0) | 2021.07.11 |
[Day +4] 연산자 (0) | 2021.07.11 |
[Day +3] 선언과 초기화, 형변환, 데이터 오버플로우, printf, escape문자 (0) | 2021.07.11 |