이전 내용
[java] parse+자료형: 문자열 변환
이전 내용 [java] 이클립스 한글 깨짐이전 내용 [java] 이클립스 다크모드, 글꼴 설정이전 내용 [Java] Java 개념, Java를 위한 프로그램 설치Java 란?출처: 위키백과 자바(영어: Java)는 썬 마이크로시
puppy-foot-it.tistory.com
예제1
Q. 키보드로 입력 받은 정수의 제곱값을 출력하는 프로그램 만들기
// 퀴즈1. 키보드로 입력 받은 정수의 제곱값 출력 프로그램
scanner.nextLine();
System.out.print("정수를 입력하세요: ");
int num1 = scanner.nextInt();
int num2 = num1 * num1;
System.out.println(num1 + "의 제곱: " + num2);

▶ scanner.nextInt()를 사용하여 정수값을 입력 받아 num1에 저장하고, num1을 두 번 곱한 값을 num2 변수에 저장한 뒤 출력해주면 된다.
예제2
Q. 키보드로 정수를 입력 받아
1) 4와 5로 나누어지는지
2) 4 또는 5로 나누어지는지
3) 4나 5중 하나로 나눠지고 두 수 모두로도 나눠지는지를
true/false로 출력되는 프로그램 만들기
scanner.nextLine();
System.out.print("정수를 입력하세요: ");
int num3 = scanner.nextInt();
if ((num3 % 4 == 0) && (num3 % 5 == 0)) {
System.out.println("1. 4와 5로 나누어떨어짐: " + ((num3 % 4 == 0) && (num3 % 5 == 0)));
System.out.println("2. 4 또는 5로 나누어떨어짐: " + ((num3 % 4 == 0) || (num3 % 5 == 0)));
if ((num3 % 4 == 0) || (num3 % 5 == 0)) {
System.out.println("3. 4나 5중 하나로 나누어지고 두 수 모두로도 나누어짐: " + ((num3 % 4 == 0) && (num3 % 5 == 0)));
}
}


▶ 조건문(if문)과 비교연산자를 사용하여 풀이하였다.
◆ if, elseif, else 사용하기
if ((num3 % 4 == 0) & (num3 % 5 == 0)) {
System.out.println(num3 + "은 4와 5로 모두 나눌 수 있습니다.");
} else if ((num3 % 4 == 0) | (num3 % 5 == 0)) {
System.out.println(num3 + "은 4 또는 5 하나로만 나누어집니다.");
} else {
System.out.println(num3 + "은 4와 5 모두 나눌 수 없습니다.");
}

▶ 상단의 문제는 교수님이 내주신 문제라, 문제대로 풀이한 것이고, 필자가 생각하기엔 if, else if, else 문을 사용하는 게 좀 더 나아 보인다.
예제3.
Q. 대학을 졸업하려면 최소 140학점을 이수해야 한다고 가정. 이수한 학점 중 전공은 70학점 이상이어야 하며, 교양과 일반은 각각 30학점 이상이거나 두 영역이 80점이상 이어야 한다. 이수한 세 개의 학점을 각각 키보드로 입력받아 졸업 여부를 출력하는 프로그램을 작성하라.
System.out.print("전공 이수 학점: ");
int credit1 = scanner.nextInt();
System.out.print("교양 이수 학점: ");
int credit2 = scanner.nextInt();
System.out.print("일반 이수 학점: ");
int credit3 = scanner.nextInt();
if (credit1 + credit2 + credit3 >= 140) { // 세 개의 학점합이 140 이상이면
if ((credit1 >= 70) && (credit2 >= 30) && (credit3 >= 30)) { // 전공이 70학점 이상이고, 교양과 일반이 각 30점 이상이면
System.out.println("졸업가능");
} else if ((credit1 >= 70) && (credit2 + credit3 >= 80)) { // 전공이 70학점 이상이고, 교양과 일반 합이 80점 이상이면
System.out.println("졸업가능");
} else { // 두 조건을 만족하지 못하면
System.out.println("졸업불가");
}
} else { // 세 개의 학점합이 140 미만이면
System.out.println("졸업불가");
}

▶ 먼저, 세 학점을 모두 더한 값이 140점이 되는지 여부로 조건문을 만들고, 140점 이상일 경우에는
다시 if, else if, else의 중첩 조건문을 사용하는 방식으로 풀이하였다.
예제4
Q. 키보드로부터 0~999 사이의 정수를 입력받아 각 자릿수를 더한 결과를 출력하는 프로그램
System.out.print("0~999 사이의 정수를 입력하세요: ");
int intVar = scanner.nextInt();
int inNum1 = intVar / 100;
int inNum2 = (intVar % 100) / 10;
int inNum3 = (intVar % 100) % 10;
int numsResult = inNum1 + inNum2 + inNum3;
System.out.println("각 자릿수의 합: " + numsResult + "(" + inNum1 + "+" + inNum2 + "+" + inNum3 + ")");

▶ 세 자릿수의 값을 받는 intVar 라는 정수형 변수를 선언하고,
inNum1 은 백의 자리 수를 구하기 위해 100으로 나누고, inNum2은 10의 자리 수를 얻기 위해 입력값의 100의 나머지를 다시 10으로 나눈다. 그리고 1의 자리는 입력값의 나머지를 100으로 나누고, 다시 10으로 나눈 나머지를 얻는다.
그리고 이를 모두 더해주는 변수를 선언한 뒤 출력해 주면 된다.
예제5
Q. 대문자를 소문자로 변환하기
System.out.println("대문자 한 글자를 입력하세요: ");
char charVar = scanner.next().charAt(0);
if (charVar >= 'A' && charVar <= 'Z') {
char lowerChar = (char) (charVar + 32);
System.out.println(charVar + "의 소문자: " + lowerChar);
} else {
System.out.println("대문자를 입력해 주세요.");
}
▶ 대문자 한 글자를 입력 받는 charVar 변수를 선언해 준 뒤, 만약 입력받은 값이 대문자 A 또는 Z 범위 안에 있으면, 32를 더해줌으로 소문자로 변환해 주고, 이 값을 lowerChar 라는 변수에 저장한다.
※ 아스키 코드표에 의하면, 대문자+32= 소문자
아스키 코드
파일:attachment/1275273992_asciitable.gif 2열 이후의 코드들은 위키에서 사용할 수
namu.wiki
만약, 대문자 범위 밖에 있으면 "대문자를 입력해 주세요." 라는 값 반환.
◆ 3항 연산자 사용하기 (교수님 답안)
char lowerChar2 = (charVar >= 'A' && charVar <= 'Z') ? (char) (charVar + 32) : charVar;
if (charVar == lowerChar2) {
System.out.println("입력오류");
} else {
System.out.println(lowerChar2);
}

▶ 교수님께서는 3항 연산자를 사용하여 코드를 작성하셨다.
변수명 = 표현식1? 표현식2: 표현식3
// 표현식1 조건이 True -> 변수는 표현식2
// 표현식1 조건이 False -> 변수는 표현식3
// (char)를 사용하는 이유는 자료형 변환(casting)을 통해 정수를 문자로 변환
※ (char)를 사용하는 이유는 자료형 변환(casting)을 통해 정수를 문자로 변환하기 위함이다.
예제6
Q. 숫자 맞히기 게임: 1부터 100 사이의 랜덤 숫자 생성 사용자가 숫자를 입력하면, 입력값이 정답보다 큰지 작은지 힌트를 주고 정답을 맞힐 때가지 반복 정답을 맞히면 시도 횟수를 출력하고 게임을 종료.
Scanner scanner = new Scanner(System.in);
System.out.println("1부터 100까지 숫자 맞히기 게임을 시작합니다!");
Random random = new Random();
int targetNum = random.nextInt(100) + 1; // 1~100 사이의 임의의 수
int playTimes = 0; // 변수 선언 및 초기화 - 게임 횟수
int yourAnswer = 0; // 변수 선언 및 초기화 - 대답
do {
System.out.print("정답을 맞혀 주세요.");
yourAnswer = scanner.nextInt(); // 답안 제출
if ((1 < yourAnswer) && (yourAnswer > 100)) { // 1보다 작거나, 100보다 큰 숫자를 입력했을 경우
System.out.println(yourAnswer + "는 게임 범위가 아닙니다, 다시 입력해 주세요.");
} else { // 정상적인 숫자를 입력했을 경우
playTimes++; // 게임 횟수 증가
if (yourAnswer > targetNum) { // 답안이 정답보다 클 경우
System.out.println("더 작은 숫자를 입력해 주세요.");
} else if (yourAnswer < targetNum) { // 답안이 정답보다 작을 경우
System.out.println("더 큰 숫자를 입력해 주세요.");
} else { // 답안과 정답이 일치할 경우
if (playTimes <= 10) { // 10번 안에 맞혔을 경우
System.out.println("정답을 맞혔습니다.");
System.out.println(playTimes + "번 만에 정답을 맞히다니, 감이 좋네요!👍🏻");
} else {
System.out.println("정답을 맞혔습니다.");
System.out.println(playTimes + "번 만에 정답을 맞혔습니다.");
}
}
}
} while (yourAnswer != targetNum); // 답안과 정답이 다를 동안 반복
[코드 풀이]
- Scanner를 사용하여 사용자로부터 입력 받음.
- Random 클래스를 사용하여 1부터 100 사이의 임의의 숫자를 생성 후, targetNum 변수에 저장.
- playTimes: 사용자가 시도한 횟수를 저장. 최초 선언 시에는 0으로 초깃값 설정하여 초기화.
- yourAnswer: 사용자의 입력을 저장. 최초 선언 시에는 0으로 초깃값 설정하여 초기화.
- 사용자가 정답을 입력할 수 있도록 요청한 뒤, 입력받은 숫자가 1부터 100 사이인지 확인
- 입력이 유효하면 시도 횟수를 증가시키고, 다음 단계로 넘어감.
- 사용자의 입력이 정답보다 큰지, 작은지 확인하여 적절한 힌트 제공.
- 사용자가 정답을 맞힌 경우, 시도 횟수에 따라 성공 메시지를 다르게 출력. (10회 기준)
추가 요청
1) 숫자가 잘못 입력되면 경고 메시지 출력.
2) 재시작 기능: 게임 종료 후 다시 시작할지 묻기
char onemore; // 변수 선언 및 초기화 - 재게임 의사
do {
do {
System.out.print("정답을 맞혀 주세요.");
yourAnswer = scanner.nextInt(); // 답안 제출
if ((1 < yourAnswer) && (yourAnswer > 100)) { // 1보다 작거나, 100보다 큰 숫자를 입력했을 경우
System.out.println(yourAnswer + "는 게임 범위가 아닙니다, 다시 입력해 주세요.");
} else { // 정상적인 숫자를 입력했을 경우
playTimes++; // 게임 횟수 증가
if (yourAnswer > targetNum) { // 답안이 정답보다 클 경우
System.out.println("더 작은 숫자를 입력해 주세요.");
} else if (yourAnswer < targetNum) { // 답안이 정답보다 작을 경우
System.out.println("더 큰 숫자를 입력해 주세요.");
} else { // 답안과 정답이 일치할 경우
if (playTimes <= 10) { // 10번 안에 맞혔을 경우
System.out.println("정답을 맞혔습니다.");
System.out.println(playTimes + "번 만에 정답을 맞히다니, 감이 좋네요!👍🏻");
} else {
System.out.println("정답을 맞혔습니다.");
System.out.println(playTimes + "번 만에 정답을 맞혔습니다.");
}
}
}
} while (yourAnswer != targetNum); // 답안과 정답이 다를 동안 반복
System.out.println("게임을 다시 하시겠습니까 (y/n)?");
onemore = scanner.next().charAt(0);
} while (onemore == 'y'); // 재시작(y) 의사를 밝힐 동안만 반복
{
System.out.println("게임이 종료되었습니다.");
scanner.close();
}
▶ 먼저 재게임 의사(char) 를 담을 변수 onemore를 선언 후, 앞에서 만든 코드를 다시 do-while 문으로 묶어주었다.
그리고 while 문에서는 onemore의 입력값이 'y'일 (재시작) 동안 반복되도록 설정하였고, y 외에 다른 값이 입력되면 게임을 종료하도록 하였다.

다음 내용
'프로그래밍 및 기타 > Java' 카테고리의 다른 글
[java] java - 클래스, this() 코드 (0) | 2025.04.03 |
---|---|
[java] 예제 및 풀이 (Switch, 배열 + 반복문) (0) | 2025.04.02 |
[java] parse+자료형: 문자열 변환 (0) | 2025.04.01 |
[java] 이클립스 한글 깨짐 (0) | 2025.03.31 |
[java] 이클립스 다크모드, 글꼴 설정 (0) | 2025.03.31 |