8/10 [JAVA]-While/do~while문 예제, for문
<자바 while/do~while문 예제>
예제1. 사용자가 입력한 아이디가 "smhrd"이고 비밀번호가 "1234"인 경우만 로그인 될 수 있도록 하고 그렇지 않은 경우에는 로그인 할 수 없는 로그인 프로그램을 작성하시오.(단,입력기회는3번)
package 복습;
import java.util.Scanner;
public class 로그인 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = 0;// 틀린 개수 저장할 변수
String id = " ";
String pw = null; //레퍼런스 타입은 null o (비어있다!)
//int i = null; //기본타입은 null x
do {
System.out.print("아이디 : ");
id = sc.next();
System.out.print("비민번호 : ");
pw = sc.next();
if (id.equals("smhrd") && pw.equals("1234")) {
System.out.println("로그인성공");
break;
} else {
System.out.println("로그인실패");
//틀린 개수 세기
cnt++; //cnt = cnt+1
if(cnt==3) {
System.out.println("본인인증을해주세요");
break;
}
System.out.println("계속 하시겠습니까?");
String answer = sc.next();
if (answer.equals("n") || answer.equals("N")) {
break;
}
}
} while (true);
}
}
예제2. 랜덤으로 정수 2개를 뽑아 덧센 식을 출력하고 사용자는 답을 입력하여 사용자가 원할 때 까지 게임을 계속하고 맞춘 횟수와 틀린 횟수를 출력하는 프로그램을 작성하시오.
package 복습;
import java.util.Random;
import java.util.Scanner;
public class 랜덤수 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 랜덤 도구 생성
Random rd = new Random();
boolean sw = true;// 사용자가 정답을 맞췄을 때 -> true(새로운 문제)
// 사용자가 오담을 작성했을 때 ->false(이전 문제)
int num1 = 0; // 첫번째 랜던값 저장 변수
int num2 = 0; // 두번째 랜덤값 저장 변수
int o = 0; //맞춘개수 저장 변수
int x = 0; //틀린개수 저장 변수
while (true) {
// 1~10까지 중 랜덤 수 뽑기
// 첫번째 랜덤 수 뽑기
// (10) ->0~9
if (sw == true) {
num1 = rd.nextInt(10) + 1;
num2 = rd.nextInt(10 + 1);
}
System.out.printf("%d + %d = ", num1, num2);
int input = sc.nextInt(); // 사용자가 입력한 답
if (input == num1 + num2) { // 정답을 입력한 경우
System.out.println("Success!");
sw = true;
o++;
} else { // 오담을 입력한 경우
System.out.println("fail");
sw=false;
x++;
}
System.out.print("계속하시겠습니까?");
String answer = sc.next();
if (answer.equals("n") || answer.equals("N")) {
System.out.println("프로그램 종료");
break;
} else if (answer.equals("y") || answer.equals("Y")) {
continue; // 현재 줄 아래에 있는 실행문장은 무시 조건 확인 부분으로 바로 이동
}
}
System.out.println("맞춘 개수 : "+o);
System.out.println("틀린 개수 : "+x);
}
}
[for문]
: 정확하게 몇 번 반복해야 할 지 정해진 경우에 사용
: 몇 번 반복해야하는지 정해져 있기 때문에 인자를 잘 적어서 반복횟수를 지정해줘야 함
for(초기화 구문; 조건식; 반복후구문){ 실행문장 } 다음문장 |
* 초기화 구문: 반족문에서 사용할 변수 선언, 반복문 실행 시 맨 처음 딱 한번만 실행
* 조건식: 실행문장을 실행할 조건, 실행문장 실행 전 매번 확인
* 반복후구문: 실행문장을 실행한 다음 실행, 반복 조건 확인 전 매번(맨 처음 제외)실행
예제1) 1부터 5까지 출력해주는 반복문을 작성하시오.
package 복습;
public class ex01 {
public static void main(String[] args) {
System.out.println();
for(int i=1;i<=5;i++) { //반복문을 5번 반복
System.out.println(i);
}
}
}
for(int i=1; i<=5; i++) { //반복문을 5번 반복
System.out.println(i);
}
-> 이 반복문에서 반복되는 순서는
int i=1 -> i<=5 -> System.out.println(i); -> i++
-> i<=5 -> System.out.println(i); -> i++
-> i<=5 -> System.out.println(i); -> i++
-> i<=5 -> System.out.println(i); -> i++
-> i<=5 -> System.out.println(i); -> i++
-> i<=5
예제2) for문을 사용하여 21에서 57까지 출력하시오.
for문을 사용하여 96에서 53까지 출력하시오.
for문을 사용하여 21에서 57까지 수 중 홀수만 출력하시오.
package 복습;
public class ex02 {
public static void main(String[] args) {
//for문을 사용하여 21에서 57까지 출력하시오.
for(int i=21; i<=57; i++) {
System.out.println(i);
}
//for문을 사용하여 96에서 53까지 출력하시오
for(int i=96;i>=53;i--) {
System.out.println(i);
}
for문을 사용하여 21에서 57까지 수 중 홀수만 출력하시오
for(int i=21;i<=57;i+=2) {
System.out.println(i);
}
}
}
예제3)
package 복습;
import java.util.Scanner;
public class EX03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//사용자가 5를 입력했을 때
for(int i=1; i<=num; i++) {
System.out.println(i);
}
//사용자가 10을 입력했을 때
for(int i=1; i<=num; i++) {
System.out.println(i);
}
//사용자가 100을 입력했을 때
for(int i=1; i<=num; i++) {
System.out.println(i);
}
}
}
예제4)
package 복습;
import java.util.Scanner;
public class ex04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
//num1 과 num2 중에 어떤 수가 더 작은지 판단!
if(num1<num2) { //num1~num2
for(int i= num1;i<=num2;i++ ) {
System.out.println(i);
}
}else { //num2 가 더 작다 -> num2~num1
for(int i=num2;i<=num1;i++) {
System.out.println(i);
}
//삼항연산자 활용
int num3 = sc.nextInt();
int num4 = sc.nextInt();
//삼항연산자 사용 num3/num4 중 더 큰 숫자 big 더 작은 숫자 small
int big = (num3<num4)?num4:num3;
int small = (num3<num4)?num3:num4;
for(int i=small;i<=big;i++) {
System.out.println(i);
}
}
}
}
예제5)
package 복습;
public class ex05 {
public static void main(String[] args) {
for(int i =1; i<=50;i++) {
if(i%10==5) {
System.out.println("으악");
}else if(i%10==3||i%10==6||i%10==9) {//1의 자리수 3,6,9
System.out.println("박수");
}else {
System.out.println(i);
}
System.out.println(i);
}
}
}
예제6)
(77*1)+(76*2)+(75*3)+...+(1*77)을 계산하여 결과를 출력하시오.
package 복습;
public class ex06 {
public static void main(String[] args) {
//(77*1)+(76*2) + ... + (1*77)
// 앞에서 곱해지는 숫자저장 변수
int down = 77;
//뒤에서 곱해지는 숫자저장 변수
int up =1;
//누적합 저장 변수
int sum =0;
for(int i=1; i<=77; i++) { //1~77 i변수 활용/ 77번 반복
sum+= (down*up); //sum = sum+(down*up)
down--;
up++;
}
System.out.println(sum);
}
}
예제7)
package 복습;
public class ex_구구단 {
public static void main(String[] args) {
//구구단2단
System.out.println("==2단==");
for(int i=1;i<=9;i++) {
System.out.printf("2 * %d = %d\n", i, 2*i);
}
//2~9단까지 출력 반복문
//for문 혹은 while문(반복문) 중첩해서 쓸 수 있다!
for(int i=2;i<=9;i++) {
System.out.println("=="+i+"단==");
for(int j=1;j<=9;j++) {
System.out.printf("%d * %d = %d\n", i,j, i*j);
}
}
}
}
이중 for 문 반복 순서 파악하기
for(int i=2;i<=4;i++) {
for(int j=1;j<=2;j++) {
System.out.printf("%d * %d = %d\n", i,j, i*j);
}
1번 : int i =2
2번 : i<=4
3번 : i++
4번:int j=1
5번: j<=2
6번 : j++
system.out,print(%d * %d = %d\n, i, j , i*j);
1 -> 2 -> 4-> 5-> 7 -> 6 -> 5 ->7 ->6 ->5
->3 -> 2 -> 4 ->5 ->7 ->6 ->5
->7->6->5->3->2->4->5->7
->6->5->7->6->5->3->2
예제8)
package 복습;
public class ex_구구단 {
public static void main(String[] args) {
for(int i=2;i<=9;i++) {
System.out.print(i+"단 : \t ");
for(int j=1;j<=9;j++) {
System.out.printf("%d * %d = %d\t", i,j, i*j);
}
System.out.println();
}
}
}
예제9)
package 복습;
public class ex_구구단 {
public static void main(String[] args) {
for(int i=2;i<=9;i++) {
for(int j=1;j<=9;j++) {
System.out.printf("%d * %d = %d\t", i,j, i*j);
}
System.out.println();
}
}
}
예제10
package 복습;
public class ex07 {
public static void main(String[] args) {
//피라미드 별찍기
for(int j=1;j<=5;j++) {
for(int i=1;i<=j;i++) {
System.out.print("*");
}
System.out.println();
}
}
}
예제11
package 복습;
public class ex07 {
public static void main(String[] args) {
//피라미드 별찍기
for(int j=5;j>=1;j--) {
for(int i=1;i<=j;i++) {
System.out.print("*");
}
System.out.println();
}
}
}
예제12
package 복습;
public class ex07 {
public static void main(String[] args) {
for(int j=1;j<=5;j++) {
//4번반족 ~ 0번반목
//j=1 i<=4 (j+3 / 5-j)
//j=2 i<=3 (5 / 3)
//j=3 i<=2
//j=4 i<=1
//j=5 i<=0
for(int i=1;i<=5-j;i++) {
System.out.print(" ");
}
//1번반복 ~5번반복
for(int i=1;i<=j;i++) {
System.out.print("*");
}
System.out.println();
}
}
}
예제13
package 복습;
import java.util.Scanner;
public class ex08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//32: 1 2 3(x) 4 5 (x) ...32
//16: 1~16
//약수 : 나누어 떨어지는 수
for(int i=1;i<=num;i++) {
if(num%i==0) {
System.out.print(i+" ");
}
}
}
}
예제14
2~30까지의 약수를 구하시오.
package 복습;
import java.util.Scanner;
public class ex08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//32: 1 2 3(x) 4 5 (x) ...32
//16: 1~16
//약수 : 나누어 떨어지는 수
for(int j=2;j<=30;j++) {
System.out.print(j+"의 약수 : ");
for(int i=1;i<=j/2;i++) {
if(j%i==0) {
System.out.print(i+" ");
}
}
System.out.println(j);
}
}
}
예제14
package 복습;
import java.util.Scanner;
public class ex09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int j=1; j<=1000; j++) {
int sum =0;
//약수 합 구하는 반복문
for(int i=1;i<=j/2;i++) {
if(j%i==0){
sum+=i; //자기자신을 제외한 약수들의 합
}
}
if(j==sum) {
System.out.println(j);
}
}
}
}