개발 공부 기록
[java실습문제] 반복문 for, while 본문
문제1
public void practice1() {
// 사용자로부터 한 개의 값을 입력 받아 1부터 그 숫자까지의 숫자들을 모두 출력하세요.
// 단, 입력한 수는 1보다 크거나 같아야 합니다.
// 만일 1 미만의 숫자가 입력됐다면 “잘못 입력하셨습니다.“를 출력하세요.
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("1이상의 숫자를 입력하세요 : ");
num = scanner.nextInt();
if(num > 0) {
for (int i = 1; i <= num; i++) {
System.out.print(i + " ");
}
} else {
System.out.println("잘못 입력하셨습니다");
}
}
- for문의 i 가 1부터 시작하여야 1 ~ num까지 더한다.
<for문>
[표현법]
for(초기식; 조건식; 증감식) {
. . 반복적으로 실행시키고자하는 실행구문 . .
}
- 초기식 : 반복문이 수행될 때 단 한 번만 실행되는 구문으로 반복문 안에서 사용될 변수를 선언하고 초기값을 대입한다.
- 조건식 : 반복문이 수행될 때 조건을 작성하는 구문으로 조건식이 참(true)이면 실행구문을 실행하고, 조건식이 거짓(false)이 되는 순간 반복을 멈추고 빠져나온다.
- 증감식 : 반복문을 제어하는 변수 값을 증감 시키는 부분으로 주로 초기식에 제시한 변수를 가지고 증감 연산자(++, --)를 사용한다.
* 초기식, 조건식, 증감식은 생략이 가능하고 모두 생략하면 무한 루프에 빠진다. (생략 시에도 ;은 반드시 필요하다. for(;;))
문제2
public void practice2() {
// practice1() 문제와 동일하나, 1 미만의 숫자가 입력됐다면
// “잘못 입력하셨습니다. 다시 입력해주세요.”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
int num = 0;
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.print("1이상의 숫자를 입력하세요 : ");
num = scanner.nextInt();
if(num > 0) {
for(int i = 1; i <= num; i++) {
System.out.print(i + " ");
}
break;
} else {
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
}
}
}
- 잘못 입력하였을 때(0이하) "1이상의 숫자를 입력하세요 : " 가 다시 출력되어 숫자를 입력해야 하기 때문에
-> while문 안으로 작성
- for문을 수행한 뒤 빠져나가서 break;
<while문>
[표현법]
while(조건식) {
. . 반복적으로 실행될 코드;
[증감식, 분기문]
}
- 조건식이 true일 경우 해당 실행 코드를 실행한다.
- 조건식이 false일 경우 해당 반복문을 종료한다.
문제3
public void practice3() {
// 사용자로부터 한 개의 값을 입력 받아 1부터 그 숫자까지의 모든 숫자를 거꾸로 출력하세요.
// 단, 입력한 수는 1보다 크거나 같아야 합니다.
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("1이상의 숫자를 입력하세요 : ");
num = scanner.nextInt();
if(num > 0) {
for(int i = num; i >= 1; i--) {
System.out.print(i + " ");
}
} else {
System.out.println("잘못 입력하셨습니다.");
}
}
문제4
public void practice4() {
// practice3() 문제와 동일하나, 1 미만의 숫자가 입력됐다면
// “잘못 입력하셨습니다. 다시 입력해주세요.“가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
int num = 0;
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.print("1이상의 숫자를 입력하세요 : ");
num = scanner.nextInt();
if(num > 0) {
for(int i = num; i >= 1; i--) {
System.out.print(i + " ");
}
break;
} else {
System.out.println("잘못 입력하셨습니다.");
}
}
}
문제5
public void practice5() {
// 1부터 사용자에게 입력 받은 수까지의 정수들의 합을 출력하세요.
int num = 0;
int sum = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("정수를 하나 입력하세요 : ");
num = scanner.nextInt();
// for (int i = 1; i <= num; i++) {
// System.out.print((num += i) + " ");
// }
for(int i = 1; i <= num; i++) {
sum += i;
if(i < num) {
System.out.print(i + " + ");
} else {
System.out.print(i + " = " + sum);
}
}
}
- sum변수를 추가
문제6
첫번째 숫자가 크고 두번째 숫자가 작을경우 실행되지 않았다.
수정
public void practice6() {
// 사용자로부터 두 개의 값을 입력 받아 그 사이의 숫자를 모두 출력하세요.
// 만일 1 미만의 숫자가 입력됐다면 “1이상의 숫자만을 입력해주세요“를 출력하세요.
int num1 = 0;
int num2 = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자 : ");
num1 = scanner.nextInt();
System.out.print("두 번째 숫자 : ");
num2 = scanner.nextInt();
if (num1 > 0 && num2 > 0) {
if (num1 < num2) {
for (int i = num1; i <= num2; i++) {
System.out.print(i + " ");
}
} else if (num1 > num2){
for (int i = num1; i >= num2; i--) {
System.out.print(i + " ");
}
}
} else {
System.out.println("1이상의 숫자만을 입력해주세요");
}
}
문제7
public void practice7() {
// 위 문제와 모든 것이 동일하나, 1 미만의 숫자가 입력됐다면
// “1 이상의 숫자를 입력해주세요”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
int num1 = 0;
int num2 = 0;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("첫 번째 숫자 : ");
num1 = scanner.nextInt();
System.out.print("두 번째 숫자 : ");
num2 = scanner.nextInt();
if (num1 > 0 && num2 > 0) {
if (num1 < num2) {
for (int i = num1; i <= num2; i++) {
System.out.print(i + " ");
}
break;
} else if (num1 > num2){
for (int i = num1; i >= num2; i--) {
System.out.print(i + " ");
}
break;
}
} else {
System.out.println("1이상의 숫자만을 입력해주세요");
}
}
}
break위치!
문제8
public void practice8() {
// 사용자로부터 입력 받은 숫자의 단을 출력하세요.
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("숫자 : ");
num = scanner.nextInt();
System.out.println("===== " + num +"단 =====");
for(int i = 1; i < 10; i++ ) {
System.out.println(num + " * " + i + " = " + (num * i));
}
}
문제9
public void practice9() {
// 사용자로부터 입력 받은 숫자의 단부터 9단까지 출력하세요.
// 단, 2~9 사이의 숫자가 아닌 경우 “2~9 사이의 숫자만 입력해주세요”를 출력하세요.
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("숫자 : ");
num = scanner.nextInt();
if(num > 1 && num < 10) {
System.out.println("===== " + num +"단 =====");
for(int i = 1; i < 10; i++ ) {
System.out.println(num + " * " + i + " = " + (num * i));
}
} else {
System.out.println("2~9 사이의 숫자만 입력해주세요.");
}
}
문제10
public void practice10() {
// Practice9() 문제와 동일하나, 2~9 사이의 숫자가 아닌 값이 입력됐다면
// “2~9 사이의 숫자를 입력해주세요”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
int num = 0;
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.print("숫자 : ");
num = scanner.nextInt();
if(num > 1 && num < 10) {
System.out.println("===== " + num +"단 =====");
for(int i = 1; i < 10; i++ ) {
System.out.println(num + " * " + i + " = " + (num * i));
}
break;
} else {
System.out.println("2~9 사이의 숫자만 입력해주세요.");
}
}
}
문제11
public void practice11() {
// 사용자로부터 시작 숫자와 공차를 입력 받아
// 일정한 값으로 숫자가 커지거나 작아지는 프로그램을 구현하세요.
// 단, 출력되는 숫자는 총 10개입니다.
int startnum = 0;
int commonDifference = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("시작 숫자 : ");
startnum = scanner.nextInt();
System.out.print("공차 : ");
commonDifference = scanner.nextInt();
// for(int i = startnum; i <= (startnum + (commonDifference * 9)); i += commonDifference) {
// System.out.print(i + " ");
// }
for(int i = 1; i <= 10; i++) {
System.out.print(startnum + " ");
startnum += commonDifference;
}
}
내가 작성한 코드와 강사님 코드 비교..
나는 for문 조건에 조건식과 증감식을 작성하였다.
강사님은 결과출력하는 동안 for문 반복 ~10번
문제12
public void practice12() {
// 정수 두 개와 연산자(문자열로 입력 받고 입력된 연산자에 따라 알맞은 결과를 출력하세요.
// 단, 해당 프로그램은 연산자 입력에 “exit”라는 값이 들어올 때까지 무한 반복하며
// exit가 들어오면 “프로그램을 종료합니다.”를 출력하고 종료합니다.
// 또한 연산자가 나누기이면서 두 번째 정수가 0으로 들어오면
// “0으로 나눌 수 없습니다. 다시 입력해주세요.”를 출력하며,
// 없는 연산자가 들어올 시 “없는 연산자입니다. 다시 입력해주세요.”라고 출력하고
// 두 경우 모두 처음으로 돌아가 사용자가 다시 연산자부터 입력하도록 하세요.
String operator = "";
int num1 = 0;
int num2 = 0;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("연산자(+,-,*,/,%) : ");
operator = scanner.nextLine();
if(operator.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
System.out.print("정수1 : ");
num1 = scanner.nextInt();
System.out.print("정수 2 : ");
num2 = scanner.nextInt();
scanner.nextLine();
switch(operator) {
case "+":
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
break;
case "-":
System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
break;
case "*":
System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
break;
case "/":
if (num2 == 0) {
System.out.println("으로 나눌 수 없습니다. 다시 입력해주세요.");
} else
System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
break;
case "%":
System.out.println(num1 + " % " + num2 + " = " + (num1 % num2));
break;
default:
System.out.println("없는 연산자입니다. 다시 입력해주세요.");
}
}
}
- operator에 문자열인 exit가 입력되었을 때 프로그램이 종료되어야 하기때문에 자료형을 String으로 변경해주었다.
- 정수2를 입력받는 scanner에서 scanner.nextLine(); 두번째 반복에서 다음 입력값으로 넘어가(Enter)지 않게하기 위해 버퍼를 비워주어야한다.
** nextInt()는 입력값으로 들어온 값 중에 Enter나 공백을 기준, 그 앞의 int값을 가져온다.
남아있는 값은 Enter -> 출력단계가 넘어가버림
** nextLine / next 차이
띄어쓰기를 포함해서 입력을 받고 싶을 때는 --> nextLine()
띄어쓰기를 기준으로 입력을 받고 싶을 때는 --> next()
'실습 문제 > java' 카테고리의 다른 글
[java실습문제] 조건문 if, switch (0) | 2021.09.11 |
---|---|
[java실습문제] 연산자 (0) | 2021.09.09 |
[java실습문제] 형변환 (0) | 2021.09.08 |
[java실습문제] 변수 Scanner (0) | 2021.09.08 |