본문 바로가기

JAVA

231211 Java

while 로 점수 입력받기, 범위를 벗어나면 다시 입력받기

public static void main(String[] args) {
    boolean run = true;
    int score;
    Scanner sc = new Scanner(System.in);


    while (run) {
        System.out.println("점수를 입력하세요. ( 0 ~ 100 )");
        System.out.print("입력 : ");
        score = sc.nextInt();
        if (score < 0 || score > 100){
            System.out.println("올바른 숫자가 아닙니다. 다시 입력해주세요");
            continue;
        }
        run = false;
    }
    System.out.println("프로그램 종료");
}

 

가위바위보를 while 로 적어보기

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.println("1.가위, 2.바위, 3.보");
    int input = sc.nextInt();

    while (input > 3 || input < 1) {
        System.out.println("다시 입력해주세요.");
        input = sc.nextInt();
    }

    sc.close();
}

 

do - while

// do ~ while
/*
while 문과 다르게 무조건 한번은 실행하고 그 후 조건에 따라 반복여부를 결정
while 문은 조건식이 거짓이라면 반복을 실행하지 않음
do ~ while 문은 거짓이라도 무조건 한 번은 반복을 도는 형태.
 */
public class DoWhile {
    public static void main(String[] args) {
        do {
            System.out.println("실행합니다."); // 무조건 한번은 실행
        } while (false); // 이후 조건에 따라 반복 실행여부 판단
        
        Scanner sc = new Scanner(System.in);
        
        int score;
        do {
            System.out.println("점수 입력해주세요. ( 0 ~ 100 )");
            score = sc.nextInt();
        } while (score > 100 || score < 0);

        sc.close();
    }

 

가위바위보 입력을 do while 문으로 변경해보기

int input;
do {
    System.out.println("1.가위, 2.바위, 3.보");
    System.out.print("입력 : ");
    input = sc.nextInt();
} while (input < 1 || input > 3);

 

2진법 만드는 반복문 만들기

int number = 10;
String s = "";
while (number > 0) {
    s += number % 2;
    number /= 2;
}
System.out.println(s); // 0101 출력

 

해당 반복문으로 2진법을 만들면 거꾸로 출력됨

String str = "";
for (int i = s.length() - 1; i >= 0; i--) {
    str += s.charAt(i);
}
System.out.println(str); // 1010 출력

 

다른 반복문으로 다시 거꾸로 뒤집어 줌

 

정보처리기사 기출 문제

public static void main(String[] args) {
    int i = 0;
    int sum = 0;
    while (i < 10) {
        i++;
        if (i % 2 == 1) {
            continue;
        }
        sum += i;
    }
    System.out.println(sum); // 30
}

 

암산해보았을 때 20 이 출력될 줄 알았는데 30 출력

i++; 문장이 가장 앞줄에 있다는 것이 체크포인트, 0 ~ 9 를 도는 것처럼 보이지만

1 ~ 10 을 도는 반복문

 

print 예제

public static void main(String[] args) {
    System.out.println(""); // "" 안의 내용을 출력하고 엔터
    System.out.print(""); // "" 안의 내용을 출력

    System.out.print("여기까지가 print 출력\r\n");
    System.out.println("ln이 있는 것");
    System.out.printf("출력 서식", 출력 내용);

    String name = "홍길동";
    System.out.printf("저는 %s 입니다.%n", name);
    System.out.printf("제 나이는 %d 입니다.%n", 50);
    System.out.printf("제 나이는 %4.1f 입니다.%n", 35.0);
    System.out.printf("%d을(를) 8진수로 변환하면 %o%n", 10, 10);
    // 0 1 2 3 4 5 6 7
    System.out.printf("%d을(를) 16진수로 변환하면 %x%n", 15, 15);
    // 0 1 2 3 4 5 6 7 8 9 a b c d e f
    /*
    %b : boolean
    %d : 정수
    %f : 실수
    %o : 8진법
    %x : 16진법
    %c : char
    %s : String
    %n : 줄바꿈
     */
    double pi = 3.1415926535;
    System.out.printf("pi는 %f%n", pi);
    System.out.printf("pi는 %.10f%n", pi); // 소숫점 10자리 출력 요청
    System.out.printf("%05d%n", 5); // 총 5자리 출력, 빈칸은 0 으로 채움
    System.out.printf("%s%n", name); // 홍길동
    System.out.printf("%5s%n", name); // __홍길동, _ 은 빈칸
    System.out.printf("%-5s%n", name); // 홍길동__, _ 은 빈칸
    name = "홍길동입니다."; // 7
    System.out.printf("글자수 : %d%n", name.length()); // 홍길동입니다. , . 까지 해서 7글자
    System.out.printf("%.5s%n", name); // 홍길동입니, 5글자 까지만 출력
    System.out.printf("%6.5s%n", name); // _홍길동입니, 총 6칸 중 name 5글자 까지만 출력
}

 

switch case

public static void main(String[] args) {
    // Switch 스위치
    /*
    if, else if, else 를 다르게 표현한 문장
    각 조건은 case 의 값과 비교해서 결과가 true 일 경우 조건 수행
    조건의 값은 수치형일 경우 int 이하만 가능
    문자열도 비교 가능
     */
    int key = 4;
    switch (key) {
        case 4:
            System.out.println("key : 4 입니다.");
            break;
        case 5:
            System.out.println("key : 5 입니다.");
            break;
        case 6:
            System.out.println("key : 6 입니다.");
            break;
        default:
            System.out.println("4, 5, 6 이 아닙니다.");
            break;
    }
}

 

만약 break 가 없다면 지정된 case 부터 switch 문의 끝까지 출력

 

if 문 switch 로 바꾸어보기

public static void main(String[] args) {
    int score = 75;
    char hakzum;

    if (score >= 90) {
        hakzum = 'A';
    } else if (score >= 80) {
        hakzum = 'B';
    } else if (score >= 70) {
        hakzum = 'C';
    } else if (score >= 60) {
        hakzum = 'D';
    } else {
        hakzum = 'F';
    }
    System.out.println(hakzum);

    switch (score/10) { // 10 을 나누어 몫 값으로 체크
        case 10:
        case 9:
            hakzum = 'A';
            break;
        case 8:
            hakzum = 'B';
            break;
        case 7:
            hakzum = 'C';
            break;
        case 6:
            hakzum = 'D';
            break;
        default:
            hakzum = 'F';
            break;
    }
    System.out.println(hakzum);
}

 

동적 가변배열

public static void main(String[] args) {
    int[][] arr1 = new int[3][3];
    int[][] arr2 = new int[3][];

    arr2[0] = new int[3]; // arr2[0] 의 배열은 총 3칸
    arr2[1] = new int[6]; // arr2[1] 의 배열은 총 6칸
    arr2[2] = new int[12]; // arr2[2] 의 배열은 총 12칸

    for (int[] is : arr2) {
        for (int i : is) {
            System.out.printf("%2d", i); // 0 0 0, 0 0 0 0 0 0 0, 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        }
        System.out.println();
    }
}

// 2중 for 문으로 해보기
for (int i = 0; i < arr2.length; i++) {
    for (int j = 0; j < arr2[i].length; j++) {
	    System.out.print(arr2[i][j]);
    }
    System.out.println();
}

 

동적 배열 별찍기

public static void main(String[] args) {
    char[][] stars = new char[10][];

    for (int i = 0; i < stars.length; i++) {
        stars[i] = new char[i+1];
        for (int j = 0; j < stars[i].length; j++) {
            stars[i][j] = '*';
            System.out.printf("%c", stars[i][j]); // char 형은 %c 로 문자 출력, 여기서는 %s 도 가능
        }
        System.out.println();
    }
}

 

코딩도장 홈페이지 문자열 압축하기

public static void main(String[] args) {
    String a = "aaabbcccccca";
    int count = 1;
    String answer = "";
    char[] cArr = new char[a.length()];
    for (int i = 0; i < a.length(); i++) {
        cArr[i] = a.charAt(i); // 먼저 배열로 값 저장
    }
    for (int i = 1; i < cArr.length; i++) {
        if (cArr[i-1] == cArr[i]) { // 배열 i - 1 글자와 i 번째 글자가 같으면 count 증가
            count ++;
        } else if (cArr[i-1] != cArr[i]) { // 배열 글자가 다르면 answer 문자열에 문자와 값 저장
            answer += Character.toString(cArr[i-1]) + count;
            count = 1;
        }
    }
    answer += Character.toString(cArr[cArr.length - 1]) + count; // 마지막에 배열 글자 저장 및 값 저장
    System.out.println(answer);
    }
}

'JAVA' 카테고리의 다른 글

231213 Java  (0) 2023.12.13
231212 Java  (0) 2023.12.12
231208 Java  (0) 2023.12.08
231207 Java  (0) 2023.12.07
231206 Java  (2) 2023.12.06