-- 정수 아닌 문자를 입력할 수 있으므로 정수를 입력할 때까지 반복적으로 입력을 받는다.
▷ 첫 번째 방법
-- nextInt();는 스캐너 버퍼를 초기화를 위해 nextLine();도 써 주어야 하기 때문에 번거롭고 잘 사용하지 않는다.
for (;;) { // 무한루프
try { // 오류가 발생하면 던져버린다
System.out.print(">> 몇단볼래? =>");
int dan = sc.nextInt(); // 7
// qwer
// java.util.InputMismatchException 발생
sc.nextLine();
System.out.println("===" + dan + "단 ===");
for (int i = 0; i < 9; i++) {
System.out.println(dan + "×" + (i + 1) + "=" + (dan * (i + 1)));
sc.nextLine(); // 스캐너 버퍼에 처음 입력 받은 qwer 계속 남아 있기 때문에 오류 무한으로 발생
// 문자열(qwer)을 초기화 해 주어야 한다.
}
break;
} catch (InputMismatchException e) { // 던진 오류를 받아서 처리한다
System.out.println(">>> 정수만 입력하세요!!");
sc.nextLine();
}
}
sc.close();
}
▷ 두 번째 방법
-- String 타입으로 모두 받아오기 때문에 스캐너 버퍼에 남아 있지 않다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (;;) {
try {
System.out.print(">> 몇단볼래? =>");
String inputStr = sc.nextLine();
int dan = Integer.parseInt(inputStr);
System.out.println("===" + dan + "단 ===");
for (int i = 0; i < 9; i++) {
System.out.println(dan + "×" + (i + 1) + "=" + (dan * (i + 1)));
}
break;
} catch (NumberFormatException e) {
System.out.println(">>> 정수만 입력하세요!!");
}
}
System.out.println("=== 프로그램 종료!! ===");
sc.close();
}
-- Integer.parseInt(inputStr); : 문자열을 int로 변환해 주지만 int형이 아닐 경우 NumberFormatException 발생
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int inputNum1 = 0;
for (;;) {
try {
System.out.print(">> 첫 번째 정수를 입력하세요 =>");
// int inputNum1 = sc.nextInt();
inputNum1 = Integer.parseInt(sc.nextLine());
break;
} catch (NumberFormatException e) {
System.out.println("== 입력한 값은 정수가 아닙니다. ==");
}
}
System.out.println("1. 첫 번째 정수 : " + inputNum1);
sc.close();
}
for문을 이용하여 누적의 합을 구해 보자.
▷ 1+2+3+4+5+6+7+8+9+10 ==> 55
public static void main(String[] args) {
// 1+2+3+4+5+6+7+8+9+10 ==> 55
// 11+12+13+14+15+16+17+18+19+20 ==> 155
int sum=0; // 누적의 합
for(int i=0, j=1; i<10; i++, j++) {
sum+=j; // sum = sum + j;
// sum = 0+1;
// sum = 1+2;
// sum = (1+2)+3;
// sum = ((1+2)+3)+4;
// ......
// sum = 1+2+3+4+5+6+7+8+9+10;
}
System.out.println("누적의 합계 : "+sum);
}
-- for 조건문에 j++ 없이 누적의 합계 구하기
sum = 0;
for (int i = 0, j = 1; i < 10; i++) {
sum += j++;
}
"1부터 10까지의 누적의 합계 : 55"를 출력해 보자.
-- (1과 10은 입력한 대로 바뀌어야 한다.)
▷ 첫 번째 방법
int j=11;
System.out.print(j + "부터");
for (int i = 0; i < 10; i++) {
sum += j++;
}
System.out.println((j-1)+"까지의 누적의 합계 : "+sum);
▷ 두 번째 방법
int start = 11;
int j=start;
for (int i = 0; i < 10; i++) {
sum += j++;
}
System.out.println(start+"부터"+(j-1)+"까지의 누적의 합계 : "+sum);
▷ 세 번째 방법
-- 첫 번째 방법이 지저분한 것 같아 다시 생각해 보았다.
int i, j;
for (i = 0, j=11; i < 10; i++) {
sum += j++;
}
System.out.println((j-i)+"부터"+(j-1)+"까지의 누적의 합계 : "+sum);
아래 결과가 나오는 코드를 만들어 보자.
▷ 첫 번째 방법
import java.util.Scanner;
public class MainForQuiz1 {
public static void main(String[] args) {
int inputNum1=0, inputNum2=0;
int sum=0;
Scanner sc = new Scanner(System.in);
for (;;) {
try {
System.out.print(">> 첫 번째 정수 입력 : ");
inputNum1 = Integer.parseInt(sc.nextLine());
break;
} catch (NumberFormatException e) {
System.out.println("== 정수만 입력하세요!! ==");
}
}
for (;;) {
try {
System.out.print(">> 두 번째 정수 입력 : ");
inputNum2 = Integer.parseInt(sc.nextLine());
break;
} catch (NumberFormatException e) {
System.out.println("== 정수만 입력하세요!! ==");
}
}
int i, j;
for(i=0, j=inputNum1; i<inputNum2-inputNum1+1; i++) {
sum += j++;
}
System.out.println(inputNum1+"부터"+inputNum2+"까지의 누적의 합은"+sum+"입니다.");
sc.close();
}
}
▷ 두 번째 방법
for(int i=inputNum1; i<inputNum2+1; i++) {
sum += i;
}
System.out.println(inputNum1+"부터"+inputNum2+"까지의 누적의 합은"+sum+"입니다.");
4부터 11까지의 홀수 : 5, 7, 9, 11 를 출력해 보자.
String holsuStr ="";
for(int i=inputNum1; i<inputNum2+1; i++) {
if(i%2!=0) {
holsuStr += i+",";
}
}
System.out.println(inputNum1+"부터"+inputNum2+"까지의 홀수 : "+holsuStr);
-- 맨 끝 끌자에도 ',' 가 붙는 현상 발생
-- 맨 뒤의 ','를 빼기 위해 substring과 endIndex를 구하기 위해 문자열의 길이를 구하는 방법을 알아야 한다.
String str = "대한민국 서울시 강남구";
// 0 1 2 3 4 5 6 7 8 9 10 11
System.out.println(str);
// 대한민국 서울시 강남구
System.out.println(str.substring(5, 8)); // .substring(beginIndex,endIndex);
// 어떠한 문자열의 일부분만 뽑아내는 것
// endIndex 앞까지
System.out.println("변수 str의 글자수 : "+str.length());
▷ 첫 번째 방법
String holsuStr ="", jaksuStr = "";
for(int i=inputNum1; i<inputNum2+1; i++) {
if(i%2!=0) {
holsuStr += i+",";
} else {
jaksuStr += i+",";
}
System.out.println(inputNum1+"부터"+inputNum2+"까지의 홀수 : "+holsuStr.substring(0, holsuStr.length()-1));
System.out.println(inputNum1+"부터"+inputNum2+"까지의 짝수 : "+jaksuStr.substring(0, jaksuStr.length()-1));
-- 첫 번째 정수부터 두 번째 정수까지의 홀수와 짝수를 구할 수 있다.
홀수의 누적 합과 짝수의 누적 합을 구하여라.
String holsuStr ="", jaksuStr = "";
int holsusum=0, jaksuSum=0;
for(int i=inputNum1; i<inputNum2+1; i++) {
if(i%2!=0) {
holsuStr += i+",";
holsusum += i;
} else {
jaksuStr += i+",";
jaksuSum += i;
}
System.out.println(inputNum1+"부터"+inputNum2+"까지의 홀수 : "+holsuStr.substring(0, holsuStr.length()-1));
System.out.println(inputNum1+"부터"+inputNum2+"까지의 홀수의 누적치 : "+holsusum);
System.out.println(inputNum1+"부터"+inputNum2+"까지의 짝수 : "+jaksuStr.substring(0, jaksuStr.length()-1));
System.out.println(inputNum1+"부터"+inputNum2+"까지의 짝수의 누적치 : "+jaksuSum);
다중 for문을 사용하여 아래 결과를 나타내 보자.
▷ 첫 번째 방법
public static void main(String[] args) {
char ch = 'a';
for(int i=0; i<3; i++) { // 바깥 for문
for(int j=0; j<7; j++) { // 내부 for문
System.out.print((char)(ch+j));
}
System.out.println();
ch += 7;
}
}
▷ 두 번째 방법
char ch = 'a';
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 7; j++) {
ch++;
System.out.print(ch);
}
System.out.println();
}
▷ 세 번째 방법
- 단일 for문 사용
ch = 'a';
for(int i=0; i<'u'-'a'+1; i++){
System.out.print(ch++);
if((i+1)%7==0) {
System.out.println();
}
}
다중 for문을 사용하여 아래 결과를 나타내 보자.
for(int i=0; i<4; i++) {
for(int j=0; j<3; j++) {
System.out.print("["+i+","+j+"]");
}
System.out.println("");
}
for(int i=0; i<4; i++) {
if(i==2) continue;
for(int j=0; j<3; j++) {
System.out.print("["+i+","+j+"]");
}
System.out.println("");
}
for(int i=0; i<4; i++) {
for(int j=0; j<3; j++) {
if(j==1) continue;
System.out.print("["+i+","+j+"]");
}
System.out.println("");
}
for(int i=3; i>0; i--) {
for(int j=0; j<5; j++) {
if(j==3) continue;
String str = (j<4)?"\t":""; // 305호, 205호, 105호 뒤에는 탭 넣지 않는다.
System.out.print(i+"0"+(j+1)+"호"+str);
}
System.out.println("");
}
for(int i=5; i>0; i--) {
if(i==4) continue;
for(int j=0; j<5; j++) {
if(j+1==4) continue;
String str = (j<3)?"\t":"";
System.out.print(i+"0"+(j+1)+"호"+str);
}
System.out.println("");
}
int sum3=0, sum9=0;
for(int i=0; i<100; i++) {
if(i%3==0) {
sum3 += i;
}
if(i%9==0) {
sum9 += i;
}
}
System.out.println("1부터 100까지 중 3의 배수의 합은? "+sum3);
System.out.println("1부터 100까지 중 9의 배수의 합은? "+sum9);
▷ 첫 번째 방법
String holStr="", jakStr="";
int holSum=0, jakSum=0;
for(int i=1; i<=10; i++) {
if(i%2!=0) {
holStr += i+ "+";
holSum += i;
}
else {
jakStr += i+ "+";
jakSum += i;
}
}
System.out.println("1부터 10까지 중 홀수 누적의 합은? \n" +
holStr.substring(0, holStr.length()-1)+"="+holSum);
System.out.println("1부터 10까지 중 짝수 누적의 합은? \n" +
jakStr.substring(0, jakStr.length()-1)+"="+jakSum);
▷ 두 번째 방법
String holStr="", jakStr="";
int holSum=0, jakSum=0;
for(int i=1; i<=10; i++) {
if(i%2 !=0) { // 홀수이라면
String str = (i<9)?"+":"=";
holStr += i+str;
holSum += i;
}
else { // 짝수이라면
String str = (i<9)?"+":"=";
jakStr += i+str;
jakSum += i;
}
}
System.out.println("1부터 10까지 중 홀수 누적의 합은? \n" + holStr + holSum);
System.out.println("1부터 10까지 중 짝수 누적의 합은? \n" + jakStr + jakSum);
▷ 세 번째 방법
String holStr="", jakStr="";
int holSum=0, jakSum=0;
for(int i=1; i<=10; i++) {
if(i%2==1) {holSum+=i;
} else jakSum += i;
if(i%2==1) {holStr+=i+"+";
} else jakStr+=i+"+";
}
System.out.println("1부터 10까지 중 홀수 누적의 합은?\n" +
holStr.substring(0, holStr.length()-1)+"="+holSum);
System.out.println("1부터 10까지 중 짝수 누적의 합은?\n" +
jakStr.substring(0, jakStr.length()-1)+"="+jakSum);
}
(i,j)
(0,0) (0,1) (0,2) (0,3) (0,4) (0,0) (0,1) (0,2) (0,3) (0,4)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,0) (1,1) (1,2) (1,3)
(2,0) (2,1) (2,2) (2,3) (2,4) → (2,0) (2,1) (2,2)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,0) (3,1)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,0)
-- i+j <= 4 이라면 *을 출력한다.
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
if(i+j<=4)
System.out.print("*");
}
System.out.println("");
}
▷ 첫 번째 방법
for(int i=0; i<9; i++) {
for(int j=0; j<9; j++) {
if(i+j<9)
System.out.print("*");
}
System.out.println(i+1);
}
▷ 두 번째 방법
for(int i=9; i>0; i--) {
for(int j=i; j>0; j--) {
System.out.print("*");
}
System.out.println(10-i);
}
문제1 ▷▷
for(int i=0; i<5; i++) {
for(int j=0; j<=i; j++) {
System.out.print("*");
}
System.out.println("");
}
문제2 ▷▷
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i + j < 4) {
System.out.print(" ");
} else
System.out.print("*");
}
System.out.println("");
}
문제3 ▷▷
▷ 첫 번째 방법
System.out.println("정피라미드");
for(int i=0; i<3; i++) {
for(int j=0; j<5; j++) {
if(i+j<=1||j-i>=3) {System.out.print(" ");
}
else System.out.print("*");}
System.out.println("");
}
▷두 번째 방법
for(int i=0; i<3; i++) {
for(int j=0; j<3-i; j++) {
System.out.print(" ");
}
for(int k=0; k<(2*i)+1; k++) {
System.out.print("*");
}
System.out.println();
}
문제4 ▷▷
for(int i=3; i>0; i--) {
for(int j=3-i; j>0; j--) {
System.out.print(" ");
}
for(int k=(2*i)-1; k>0; k--) {
System.out.print("*");
}
System.out.println();
}
문제5 ▷▷
for(int i=0; i<2; i++) {
for(int j=1; j<3-i; j++) {
System.out.print(" ");
}
for(int k=0; k<(2*i)+1; k++) {
System.out.print("*");
}
System.out.println("");
}
for(int i=3; i>0; i--) {
for(int j=3-i; j>0; j--) {
System.out.print(" ");
}
for(int k=(2*i)-1; k>0; k--) {
System.out.print("*");
}
System.out.println();
}
'수업내용' 카테고리의 다른 글
[Day8][Java] 가위바위보 게임 / 숫자 맞히는 게임 / 레이블 / 배열 / 확장된 for문 / Random / 로또 당첨번호 / 버블 정렬 (0) | 2019.09.01 |
---|---|
[Day7][Java] while문 / do~while문 / Math.random / equals / 가위바위보 프로그램 (0) | 2019.09.01 |
[Day5][Java] switch case / 반복문(for) / break / continue (0) | 2019.09.01 |
[Day4][Java] wrapper클래스 / 제어문(if) / 스캐너(Scanner) / 반올림(round) / 학점 프로그램 (0) | 2019.09.01 |
[Day3][Java] 생성자 / 형변환 / 연산자 (0) | 2019.09.01 |