본문 바로가기

Language/JAVA

[JAVA] 명품 자바 에센셜 예제 3장

 

예제 3-1: for문을 이용하여 1부터 10까지 합 출력하기
문제: for문을 이용하여 1부터 10까지 덧셈으로 표시하고 합을 출력하라.

package chap03;
//예제 3-1
//for문을 이용하여 1부터 10까지 덧셈으로 표시하고 합을 출력
public class ForSample{
	public static void main(String[] args) {
		int i, sum=0;
		
		for(i=1; i<=10;i++) {
			if(i<=9) {
				
				System.out.print(i+"+");
				sum+=i;
			}
			else if(i==10) {
				sum+=i;
				System.out.print(i+"="+sum);
			}
		}
	}
}
//출력결과
1+2+3+4+5+6+7+8+9+10=55

 

예제 3-2: while문을 이용하여 입력된 정수의 평균 구하기
문제: while문을 이용하여 정수를 여러 개 입력 받고 평균을 출력하라. 0이 입력되면 입력을 종료한다.

package chap03;
//예제 3-2
import java.util.Scanner;

public class WhileSample {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in); //scanner 선언
		
		int count=0, n=0; //정수 count, n 선언
		double sum=0; //실수형 sum 선언
		
		System.out.println("정수를 입력하고 마지막에 0을 입력하세요.");
		while((n=scanner.nextInt())!=0) { //입력받은 정수 n이 아니면
			sum=sum+n; //sum과 n의 합
			count++; //count 1 증가
		}
		System.out.println("수의 개수는 "+count+"개이며");
		System.out.println("평균은 "+sum/count+"개입니다.");
		
		scanner.close(); //scanner 선언 종료
	}

}
//출력결과
정수를 입력하고 마지막에 0을 입력하세요.
10 30 -20 40 0
수의 개수는 4개이며 평균은 15.0입니다.

 

예제 3-3 : do-while문을 이용하여 'a'에서 'z'까지 출력하기
문제: do-while문을 이용하여 'a'부터 'z'까지 출력하는 프로그램을 작성하라.

package chap03;
//예제 3-3
public class DoWhileSample {

	public static void main(String[] args) {
		char a='a';
		
		do {
			System.out.print(a);
			a=(char)(a+1);
		}while(a<='z');
	}

}
//출력결과
abcdefghijklmnopqrstuvwxyz

 

예제 3-4 : 2중 중첩을 이용한 구구단 출력하기
문제: 2중 중첩된 for문을 이용하여 구구단을 출력하는 프로그램을 작성하라.

package chap03;

public class NestedLoop {
//예제 3-4
	public static void main(String[] args) {
		for(int i=1; i<10;i++) {
			for(int j=1;j<10;j++) {
				System.out.print(i+"*"+j+"="+i*j); //구구셈 출력
				System.out.print("\t"); //하나씩 탭으로 띄기
			}
			System.out.println(); //한 단이 끝나면 다음 줄로 커서 이동
		}
	}

}

 

예제 3-5 : continue문을 이용하여 양수 합 구하기
문제: 5개의 정수를 입력 받고 양수 합을 구하여 출력하는 프로그램을 작성하라.

package chap03;
//예제 3-5
import java.util.Scanner;

public class ContinueExample {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("정수를 5개 입력하세요.");
		int sum=0; //정수형 sum=0 선언
		
		for(int i=0;i<5;i++) {
			int n=scanner.nextInt();
			if(n<=0)continue; //0이나 음수의 경우 더하지 않고 반복 진행
			else sum+=n; // 양수인 경우 sum+n;
		}
		System.out.println("양수의 합은 "+sum);
		
		scanner.close();
	}

}
//출력결과
정수를 5개 입력하세요.
5 -2 6 10 -4
양수의 합은 21

 

예제 3-6 : break문을 이용하여 while문 벗어나기
문제:"exit"이 입력되면 while문을 벗어나도록 break문을 활용하는 프로그램을 작성하라.

package chap03;

import java.util.Scanner;

//예제 3-6
public class BreakExample {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("exit을 입력하면 종료합니다.");
		
		while(true) { 
			System.out.print(">>");
			String text=scanner.nextLine();
			if(text.equals("exit")) //"exit"이 입력되면 반복 종료
				break; //while문 벗어남.
		}
		System.out.println("종료합니다.");
		scanner.close();
	}

}
//출력결과
exit을 입력하면 종료합니다
>>edit
>>exit
종료합니다.

 

예제 3-7 : 배열 선언 및 생성
문제:양수 5개를 입력 받아 배열에 저장하고, 제일 큰 수를 출력하는 프로그램을 작성하라.

package chap03;
//예제 3-7
import java.util.Scanner;

public class ArrayAccess {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		int intArray[];
		intArray=new int[5]; //5개의 크기로 배열 선언
		int max=0; //현재 가장 큰 수
		System.out.println("양수 5개를 입력하세요.");
		
		for(int i=0;i<5;i++) {
			intArray[i]=scanner.nextInt();	//입력 받은 정수를 배열에 저장
			if(intArray[i]>max) //비교하여 최댓값 비교
				max=intArray[i];	//최댓값 배열에 저장
		}
		System.out.print("가장 큰 수는 "+max+"입니다.");
		
		scanner.close();
	}

}
//출력결과
양수 5개를 입력하세요.
1 39 78 100 99
가장 큰 수는 100입니다.

 

예제 3-8 : 배열의 length필드 활용
문제: 배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력 받고 평균을 출력하라.

package chap03;
//예제 3-8
import java.util.Scanner;

public class ArrayLength {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.println("5개의 정수를 입력하세요.");
		int intArray[]=new int[5]; //배열 선언과 동시에 생성
		
		double sum=0;
		for(int i=0;i<intArray.length;i++)
			intArray[i]=scanner.nextInt();	//키보드에서 입력받은 정수 저장
		
		for(int i=0; i<intArray.length;i++)
			sum+=intArray[i]; //배열에 저장된 정수 값을 더하기
		
		System.out.print("평균은 "+sum/intArray.length);
		scanner.close();
	}

}
//출력결과
5개의 정수를 입력하세요.
2 3 4 5 9
평균은 4.6

 

예제 3-9 : for-each문 활용
문제: for-each문을 활용하여 int [] 배열의 합을 구하고, String[] 배열의 문자열을 출력하는 사례를 보인다.

package chap03;
//예제 3-9
public class foreachEx {

	public static void main(String[] args) {
		int[]  n= {1,2,3,4,5};
		int sum=0;
		for(int k:n) {
			System.out.print(k+" ");
			sum+=k;
		}
		System.out.println("합은 "+sum);
		
		String f[]= {"사과","배","바나나","체리","딸기","포도"};
		for(String s:f)//s는 f[0], f[1], ..., f[5]로 반복
			System.out.print(s + " ");
	}

}
//출력결과
1 2 3 4 5 합은 15
사과 배 바나나 체리 딸기 포도

 

예제 3-10 : 2차원 배열 생성 및 활용하기
문제: 2차원 배열에 학년별로 1, 2학기 성적을 저장하고, 4년 전체 평점 평균을 출력하라.

package chap03;

public class ScoreAverage {

	public static void main(String[] args) {
		double score[][] = {
			{3.3,3.4},	//1학년 1,2학기 평점
			{3.5,3.6},	//2학년 ''
			{3.7,4.0},	//3학년 ''
			{4.1,4.2} };//4학년 ''
		
		double sum=0;
		
		for(int year=0; year<score.length;year++)//각 학년별로 반복
			for(int term=0; term<score[year].length;term++)
				sum+=score[year][term];//전체 평점 합
		
		int n=score.length;
		int m=score[0].length;
		
		System.out.println("4년 전체 평점 평균은 " + sum/(n*m));
		}
	}
//출력결과
4년 전체 평점 평균은 3.725

 

예제 3-11 : 배열 리턴
문제: 일차원 정수 배열을 생성하여 리턴하는 makeArray()를 작성하고, 이 메소드로부터 배열을 전달받는 프로그램을 작성하라.

package chap03;

public class ReturnArray {

	static int[] makeArray() {
		int temp[] = new int[4];
		for(int i=0; i< temp.length;i++)
			temp[i]=i;
		return temp;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int intArray[];
		intArray=makeArray();
		for(int i=0; i<intArray.length;i++)
			System.out.print(intArray[i]+" ");
	}

}
//출력결과
0 1 2 3

 

예제 3-12 : 0으로 나누기 시 예외 발생으로 응용프로그램이 강제 종료되는 경우
문제: 두정수를 입력받아 나눗셈을 하고 몫을 구하는 프로그램 코드이다 . 사용자가 나누는 수에 0 을 입력하면 자바 플랫폼에 의해 예외가 발생하여 프로그램이 강제 종료된다.

package chap03;

import java.util.Scanner;

public class DivideByZero {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int dividend;//나뉨수
		int divisor;//나눗수
		
		System.out.print("나뉨수를 입력하시오:");
		dividend=scanner.nextInt();
		System.out.println("나눗수를 입력하시오:");
		divisor=scanner.nextInt();//나눗수 입력
		System.out.println(dividend+"를"+divisor+"로 나누면 몫은 "
				+dividend/divisor+"입니다.");
			
	}

}
//출력결과
나뉨수를 입력하시오:100
나눗수를 입력하시오:0
Exception in thread "main" java.lang.ArithmeticException : / by zero
at DivideByZero.main (DivideByZero.java:13)

 

예제 3-13 : 0으로 나누는 예외에 대처하는 try-catch블록 만들기
문제:try-catch-finally 블록을 이용하여 예제 3-12를 수정하여, 저우를 0으로 나누는 경우에 "0으로 나눌 수 없습니다!"를 출력하는 프로그램을 작성하라.

package chap03;

import java.util.Scanner;

public class DivideByZerohandling {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int dividend;
		int divisor;
		
		System.out.print("나뉨수를 입력하시오:");
		dividend=scanner.nextInt();
		System.out.println("나눗수를 입력하시오: ");
		divisor=scanner.nextInt();
		
		try {
			System.out.println(dividend+"를"+divisor+"로 나누면 몫은 "+dividend/divisor+"입니다");
		}
		catch(ArithmeticException e) {
			System.out.println("0으로 나눌 수 없습니다.");
		}
		finally {
			scanner.close();
		}
	}

}
//출력결과
나뉨수를 입력하시오:100
나눗수를 입력하시오:0
0으로 나눌 수 없습니다.

 

예제 3-14 : 입력오류시 발생하는 예외(InputMismatchException)
문제:Scanner 클래스를 이용하여 3 개의 정수를 입력받아 합을 구하는 프로그램을 작성하라 . 사용자가 정수
가 아닌 문자를 입력할 때 발생하는 InputMismatchException 예외를 처리하여 다시 입력받도록 하라.

package chap03;

import java.util.InputMismatchException;
import java.util.Scanner;
//예제 3-14
public class InputException {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("정수 3개를 입력하세요");
		int sum=0, n=0;
		for(int i=0;i<3;i++) {
			System.out.println(i+">>");
			try {
				n=scanner.nextInt();
			}
			catch(InputMismatchException e) {
				System.out.println("정수가 아닙니다. 다시 입력하세요!");
				scanner.next();
				i--;
				continue;
			}
			sum+=n;
		}
		System.out.println("합은 "+sum);
		scanner.close();
	}

}
//출력결과
정수 3 개를 입력하세요
0>>5
1>>R
정수가 아닙니다 . 다시 입력하세요
1>>4
2>>6
합은 15