[배운 내용 정리] 1110 자바 국비교육
2020년 11월 10일 9시 ~ 15시 30분 zoom 으로 수업 진행
Math.random() 의 랜덤 값 반환 범위를 20부터 35까지로 설정하기
0.999 … x 16 = 15.984…
(int)Math.random()*16 의 범위 0 ~ 15
(int)(Math.random()*16)+20 의 범위 20 ~ 35
package com.test01;
public class SwitchTest01 {
public void test() { int i=2;
switch(i) { case 1 : System.out.println("1입니다."); case 2 : System.out.println("2입니다."); case 3 : System.out.println("3입니다."); default : System.out.println("다른 숫자입니다."); } }
} |
package com.test01;
public class SwitchTest01 {
public void test() { int i=2;
switch(i) { case 1 : System.out.println("1입니다."); break; case 2 : System.out.println("2입니다."); break; case 3 : System.out.println("3입니다."); break; default : System.out.println("다른 숫자입니다."); } }
} |
둘의 차이점 : break;
switch case 문은 break;를 만나지 않으면 break;를 만날때까지 다음 case 문의 내용을 계속 실행한다
test() 함수를 실행하면 2입니다 3입니다 다른 숫자입니다 가 출력된다
package com.test01;
public class SwitchTest01 {
public void test() { int i=2; switch(i) { case 1 : System.out.println("1입니다."); break; case 2 : System.out.println("2입니다."); break; case 3 : System.out.println("3입니다."); break; default : System.out.println("다른 숫자입니다."); } }
public void test2() { char ch = 'b'; switch(ch) { case 'a' : System.out.println("a입니다."); break; case 'b' : System.out.println("b입니다."); break; case 'c' : System.out.println("c입니다."); break; default : System.out.println("다른 영어입니다."); } }
public void test3() { int i=2; //i가 홀수인지 짝수인지 판단하는 프로그램 작성 switch(i) { case 1: case 3: System.out.println("홀수입니다"); break; case 2: case 4: System.out.println("짝수입니다"); break; default: System.out.println("다른 숫자입니다."); } } } |
반복문
프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로,
특정 문장들을 반복해서 수행하도록 함
for문과 while 문이 있음
for 문
for(초기식; 조건식; 증감식) { 수행될 문장; } |
초기식 확인 후, 조건식 확인 -> 조건식이 true일 경우 수행될 문장 수행, false일 경우 실행x
후에 증감식 연산 후 조건식 확인, 조건식이 true일 경우 수행될 문장을 수행하고, false 경우 실행하지 않는다.
조건식이 false가 될 때까지 문장을 수행한다!
이때 조건식이 끝없이 true일 경우 무한 반복 가능하다
while문
while(조건식) { 수행될 문장; [증감식 or 분기문] } |
조건식이 true일 경우 수행될 문장을 수행한다 문장 수행이 끝나면
다시 위로 올라가 조건식을 확인하고 조건식이 true일 경우 실행,
조건식이 false가 될 때까지 수행하고, 조건식이 false가 될 경우 반복문이 종료된다.
do while 문
do { 수행될 문장; [증감식 or 분기문]; }while(조건식); |
do 안의 내용 먼저 실행하고 조건식 확인 후 true면 문장 수행, false면 종료
while 뒤에 ; 꼭 필요
do while 과 while 문 의 차이
do~while은 do 안의 내용이 먼저 실행하고 조건식을 만나 조건식을 확인,
while 은 조건식을 먼저 확인하고 조건식에 따라 내용을 실행하거나 하지 않는다.
중첩 반복문
for(초기값1; 조건식1; 증감식1) { 수행될 문장1; for(초기값2; 조건식2; 증감식2) { 수행될 문장2; } 수행될 문장3; } |
for문에 진입하면 수행될 문장 1을 먼저 수행하고, 두 번째 for문 만나 두 번째 for문에 진입하게 된다,
조건식 2가 false가 될 때까지 수행될 문장 2를 수행하고 나오면 수행될 문장 3를 수행하고 조건식 1로 돌아오게 된다.
조건식1이 false 가 될 때까지 반복한다.
분기문
for 문 안에서의 break;
for(초기값1; 조건식1; 증감식1) { 수행될 문장1; for(초기값2; 조건식2; 증감식2) { 수행될 문장2; [break;] } 수행될 문장3; [break;] } |
첫번째 [break;] 즉 두 번째 포문 내부의 [break;]를 만날 경우 두 번째 포문을 종료시키지만
두번째 [break;] 즉, 첫번째 포문 내부의 [break;] 를 만나면 해당 포문을 종료해 버린다.
break
반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문
continue
반복문 내에서만 사용 가능, 반복문 실행 시 continue 아래 부분은 실행하지 않고!
반복문을 다시 실행한다.
for문의 경우 증감식으로 이동하고, while(do~while)문의 경우 조건식으로 이동한다
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하게 사용한다.
//while(조건식) 조건식이 true일 경우 while문 실행 while(i<10) { System.out.println(i+"번째 반복문 수행"); } |
i 값이 증가하지 않아 계속 1인 상태를 유지해서 반복문이 무한으로 반복한다.
package com.test01;
public class WhileTest01 {
public static void main(String[] args) { WhileTest01.testWhile();
}
public static void testWhile() { int i = 1;
//while(조건식) 조건식이 true일 경우 while문 실행 while(i<10) { System.out.println(i+"번째 반복문 수행"); ++i; } System.out.println("while 종료 후 i의 값 >> " + i); //10
}
} |
package com.test01;
import java.util.Scanner;
public class WhileTest01 {
public static void main(String[] args) { WhileTest01.testWhile2(); }
public static void testWhile2() { //문자열을 입력받아 인덱스별로 문자 출력 Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 >> "); String str = sc.nextLine();
int index = 0;
//문자열.length()는 해당 문자열의 길이를 얻어오는 함수 //apple의 경우 length = 5 while(index < str.length()) { char ch = str.charAt(index); System.out.println(index + " : " + ch); ++index; }
}
} |
위의 while 문의 조건식을 index <= str.length() 으로 변경할 경우
index가 해당 문자열의 범위를 벗어나게 되어 ( apple의 경우 index가 4까지 존재하는데 index가 5가 된 상태로 while 문을 수행하게 되어) 에러가 나게 된다.
index = 1; 로 변경하고 해당 프로그램을 실행하면 pple 만 출력된다.
.length()함수
문자열.length() 의 형태로 사용하고, 해당 문자열의 길이를 받아오는 함수이다,
문자열이 apple일 경우 받아오는 값은 5이다.
문자열 인덱싱
-> apple
a |
p |
p |
l |
e |
0 |
1 |
2 |
3 |
4 |
문자열의 인덱싱은 0부터 시작한다.
package com.test01;
import java.util.Scanner;
public class WhileTest01 { public static void main(String[] args) { WhileTest01.testWhile3(); } public static void testWhile3() { //1부터 입력받은 수까지 정수들의 합 System.out.print("정수 하나 입력 >> "); int num = new Scanner(System.in).nextInt(); int i=1, sum=0; while(i<=num) { sum += i; System.out.println("i : " + i + "\t"); ++i; } System.out.println("i : " + i + "\t sum : " + sum);
} } |
package com.test01;
import java.util.Scanner;
public class WhileTest01 { public static void main(String[] args) { WhileTest01.testWhile4(); } public static void testWhile4() { //키보드로 4를 입력받을 때 까지 반복, 4입력받으면 종료 Scanner sc = new Scanner(System.in); while(true) { System.out.print("숫자입력[1~10] : "); int i=sc.nextInt();
if(i == 4) { System.out.println("4입력됐음 종료합니다."); break; } }
}
} |
package com.test01;
import java.util.Scanner;
public class WhileTest02 {
public static void main(String[] args) { WhileTest02.test(); }
public static void test() { int i=1;
do { System.out.println("i : " + i); ++i; }while(i<10);
System.out.println("");
//키보드로 영어 문자열 값을 입력받아 출력 반복 실행 (단 "exit" 라는 문자열 입력받으면 종료) Scanner sc = new Scanner(System.in); String str; do { System.out.print("영어 문자열 입력 >> "); str = sc.nextLine();
System.out.println("입력받은 문자열 : " + str);
}while(!str.equals("exit"));
System.out.println("종료"); // == 로는 문자열을 비교 할 수 없습니다. // 문자열변수.equals("비교할 문자열") 을 이용해야 한다. // 참조형 : String, 사용자 정의형 은 == 으로 비교 할 수 없다
//지역변수 //String str을 do while문 안에서 선언했을 경우 while 조건식에서 에러가 난다 //왜? //String str을 do while문 내부의 지역변수로 선언했기 때문에 do while 문 안에서만 사용 할 수 있다. //매개변수도 지역변수
}
} |
자바의 문자열 비교
참조형 데이터 String, 사용자 정의형은 == 연산자로 비교할 수 없다.
String 과 String 을 비교할 때 문자열변수.equals(“비교할 문자열”) 을 이용해 문자열을 비교한다.
do ~ while 문 내부에서 선언한 String형의 변수 str을 do while의 조건식으로 사용하려고 하니 에러가 난다 이유는?
do ~ while 문 내부에서 선언한 변수는 do ~ while문 안에서만 사용이 가능하다.
이는 do ~ while문 뿐만 아니라 함수 내부, if문 내부 등 상관없이 해당 변수가 선언된 블록에서만 사용가능 하다. 이를 지역변수라고 부른다.
package com.test01;
public class WhileTest03 { public static void main(String[] args) { //1부터 100까지의 숫자를 역순으로 출력 prn01(); System.out.println("\n-----");
// 1부터 100까지의 숫자 중 2의 배수만 출력 prn02(); System.out.println("-----");
// 1부터 100까지의 숫자 중 7의 배수의 갯수와 총 합을 출력 prn03(); System.out.println("-----"); } public static void prn01() { //1부터 100까지의 숫자를 역순으로 출력 int i = 100; while(i>0) { System.out.print(i + " "); if((i != 100) && (i % 10 == 0)) { System.out.println(""); } --i; }
}
public static void prn02() { // 1부터 100까지의 숫자 중 2의 배수만 출력
int i = 2; int cnt = 0;
while(i <= 100) { if(i%2 == 0) { System.out.print(i + " "); cnt++; } ++i; if(cnt == 5) { System.out.println(""); cnt = 0; } } }
public static void prn03() { // 1부터 100까지의 숫자 중 7의 배수의 갯수와 총 합을 출력 int i = 1, sum = 0, cnt = 0;
while(i <= 100) { if(i%7 == 0) { cnt++; sum += i; System.out.print(i + " "); } i++; }
System.out.println("\n1부터 100까지의 숫자 중 7의 배수의 갯수 : " + cnt + " , 7의 배수의 총합 : " + sum); }
} |
package com.test01;
import java.util.Scanner;
public class ForTest01 {
public static void main(String[] args) { testFor5(); }
public static void testFor() { //0 ~ 10 출력
int no = 0;
while(no <= 10) { System.out.print(no + " "); no++; } System.out.println("");
//위의 코드와 같은 것 //for for(int i=0; i<=10; ++i) { System.out.print(i + " "); }
}
public static void testFor2() { //0 ~ 10 역순 출력
//for for(int i=10; i>=0; --i) { System.out.print(i + " "); }
}
public static void testFor3() { //증감식은 굳이 1씩 증가 할 필요 없습니다. for(int i=0; i<=10; i+=2) { System.out.print(i + " "); } System.out.println("");
//초기식과 증감식은 1개 이상 기입 가능 //조건식은 안된다, 조건식에서 두 개 사용하려면 && || 기호 사용 필요 for(int i=0, j=10; i<10 && j>0 ; i++, j--) { System.out.println("i :" + i + "\t j : " + j ); }
System.out.println("");
for(char ch='a'; ch <= 'z'; ++ch) { System.out.println("ch : " + ch); }
}
public static void testFor4() { //1부터 100사이ㅇ의 임의의 난수를 구한다름, //1부터 난수까지의 합을 구하여 출력하라
int randNum = ((int)(Math.random()*10)+1); int sum = 0;
for(int i=1; i <= randNum; ++i) { sum += i; } System.out.println("1부터 " + sum + "까지의 합 : " + sum);
}
public static void testFor5() { //정수 두개를 키보드로 입력받고 //작은 수 ~ 큰 수 까지의 합을 구하시오. Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 >> "); int num1 = sc.nextInt();
System.out.print("정수 입력 >> "); int num2 = sc.nextInt();
int tmp = 0, sum = 0;
if(num1 >= num2) { tmp = num1; num1 = num2; num2 = tmp; }
for(int i=num1; i<=num2; ++i) { System.out.print(i + " "); sum += i; } System.out.println("sum : " + sum);
}
} |