본문 바로가기

수업내용

[Day6][Java] For 문제풀이 / 별 찍기

-- 정수 아닌 문자를 입력할 수 있으므로 정수를 입력할 때까지 반복적으로 입력을 받는다.

 

▷ 첫 번째 방법

-- 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();
		}