728x90
728x90

 

 

 

 

 

 

 

 

명품자바프로그래밍 1장 요약, 연습문제, 실습문제

명품자바프로그래밍 2장 요약, 예제

 

 


 

 

명품자바프로그래밍 3장 요약

 

 

반복문과 배열 그리고 예외 처리

 

자바의 반복문 : 중첩 반복도 여러 번 사용 가능. 반복문은 몇 번이고 중첩 반복 가능하다.

continue; 반복문 내에서 다음 반복으로 진행. break; 반복문 하나를 빠져나갈 때 사용

 

자바의 조건문이 궁금하다면? (이동)

 

(1) for ( 초기문; 조건식; 반복 후 작업 ){ 작업문 }

반복 횟수를 알 수 있는 경우. 조건식이 비워지거나 true면 무한반복

(2) while ( 조건식 ) { 작업문 }

반복 횟수를 알 수 없는 경우. 조건식이 비워지면 컴파일 오류 발생.

(3) do{ 작업문 } while ( 조건식 )

조건식이 작업문장 뒤에 있어서 한번 이상 작업문이 수행된다.

* while과 do-while은 초기문이 없기에 구문 시작 전 변수를 초기화 해야한다.

 

 

 

배열 : 인덱스와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료 구조로서 같은 타입의 데이터들이 순차적으로 저장된다. 자바에서 객체로 다루어지며 배열을 만드는 과정은 1) 배열 레퍼런스 변수 선언 , 2)배열 생성 과정으로 나뉜다. 배열 레퍼런스 변수 선언은 배열 객체의 주소 값을 가질 변수에 대한 선언이고 배열의 생성은 배열 원소에 대한 순차적 저장 공간을 확보하는 것이다. 배열 원소에 대한 접근은 배열 레퍼런스 변수명과 [ ] 사이에 원소의 인덱스를 적어 접근한다.

 

int [] array = new int[];    //1번방법
int array [] = new int[];    //2번방법

 

 

※ 배열의 크기는 배열 객체의 length 필드에 저장되며 첫 번째 원소의 인덱스는 0, 마지막 원소의 인덱스는 length-1이 된다. 배열의 인덱스는 정수만 가능. main() 메소드에 인자 전달은 String 타입의 배열을 이용한다.

 

배열의 크기 예외 : ArrayIndexOutOfBoundsException

 

 

 

배열과 for each 문

 

for (변수 : 배열레퍼런스) {반복작업문}

 

String names[]={"1", "2", "3", "4"};
for(String s:names) {
   System.out.print(s+"");
}

 

 

메소드가 배열을 리턴하는 경우 배열 공간 전체가 아닌 레퍼런스만 리턴된다. 따라서 리턴타입 선언 시 배열의 크기를 지정하지 않는다. 또한 리턴하는 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 한다.

 

 

int[] makeArray={   //리턴타입 / 메소드이름
   int temp[]=new int[4];     
   return temp;    //배열리턴
}

 

 

 

main( ) 메소드

 

자바가 실행을 시작할 때 자바가상기계JVM에 의해 호출되어야 하므로 public 속성이다.

자신을 포함하는 클래스의 객체가 생성되기 전 처음부터 JVM에 의해 호출되므로 static이다.

아무 값도 리턴하지 않기에 void 리턴타입을 가진다. 메인메소드를 끝내기 위해 리턴하려면 return;을 사용

※ 자바는 명령행에 입력된 인자들을 문자열배열 String[] 로 만들어 메인메소드에 매개변수로 전달한다. 이클립스의 run configuriation 창에서 도 손쉽게 입력받아 전달받을 수 있다.

 

public static void main(String[] args){  //명령행인자를 전달받는 코드
    String a=args[0];
    String b=args[1];
    String c=args[2];
}

 

 

 

try-catch-finally : 자바예외발생처리문. 자바프로그램 실행 중 발생하는 오류로써 트라이캐치 블록으로 잡아 처리할 수 있는 것을 Exception이라고 부른다. 자바가 발생한 예외를 처리하는 코드를 작성해두지 않으면 프로그램은 강제 종료된다.

try{ }블록 : 예외가 발생할 가능성이 있는 코드

catch( ){ }블록 : 예외가 발생했을 때 처리할 코드

finally { }블록 : 예외가 발생하든 안하든 최종 실행하려는 코드로 생략 가능

 

 

 

 

 

반복문과 배열 그리고 예외 처리 예제

 

 

1. for문을 이용하여 1부터 10까지 덧셈을 표시하고 합을 구하시오. #명품자바프로그래밍3장1번예제

 

package Luxuryjava03;
public class p0301 {
	public static void main(String[] args) {
		int sum=0;
		for(int i=1; i<=10; i++) {
			sum+= i;
			System.out.print(i);
			if(i<=9)
				System.out.print("+");
			else {
					System.out.print("=");
					System.out.print(sum);
				}
		}
	}
}  // 1+2+3+4+5+6+7+8+9+10=55

 

 

 

 

2. -1이 입력될 때까지 입력된 수의 평균 구하기 #명품자바프로그래밍3장2번예제

while은 반복 횟수를 알지 못할 경우에 이용된다고 했다. while문을 이용하여 정수를 계속 입력받아 합을 구하고 평균을 출력하는 프로그램을 만들어라. -1이 입력되면 입력을 종료한다.

 

package Luxuryjava03;
import java.util.Scanner;
public class p0302 {
	public static void main(String[] args) {
		int count=0;    // 입력된 정수의 개수 (평균값 구할 때 나눌 것)
		int sum=0;      // 합
		Scanner s=new Scanner(System.in);
		System.out.println("정수를 입력하고 마지막에 -1을 입력하세요.");
		int n=s.nextInt();
		while(n!=-1) {
			sum+=n;
			count++;
			n=s.nextInt();
		}
		if(count==0)System.out.println("입력된 수가 없습니다.");
		else {
			System.out.print("정수의 개수는 "+count+"개이며 ");
			System.out.println("평균은 "+(double)sum/count+"입니다.");
		}s.close();
	}  //  평균은 거의가 double을 사용합니다. sql도 실수값으로 생각함... 
}

 

 

 

 

3. do-while문을 이용하여 a부터 z까지 출력하는 프로그램을 작성하시오. #명품자바프로그래밍3장3번예제

 

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

 

 

 

 

4. 2중 중첩 for문을 사용하여 한 줄에 한 단씩 구구단을 출력하는 프로그램을 작성하시오. #명품자바프로그래밍3장4번예제 #자바구구단

 

package Luxuryjava03;
public class p0304 {
	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();
		}
	}
}

 

 

 

 

5. 5개의 정수를 입력 받고 그 중 양수들만 합하여 출력하는 프로그램을 만들어라. #명품자바프로그래밍3장5번예제 #자바양수합구하기

* continue : 반복문을 빠져 나가지 않으면서 다음 반복으로 진행

 

package Luxuryjava03;
import java.util.Scanner;
public class P0305 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("정수를 5개 입력하세요.");
		int sum=0;
		for(int i=0; i<5; i++) {
			int n=s.nextInt();
			if(n<=0)
				continue;    // 양수가 아닌 경우 다음반복 
			else
				sum+=n;     // 양수인 경우 더하기
		}
		System.out.println("양수의 합은 "+sum);
		s.close();
	}
}

 

 

 

 

6. exit이 입력되면 while문을 벗어나도록 break 문을 활용하는 프로그램을 작성하라. #명품자바프로그래밍3장6번예제

* break : 근처의 반복문을 벗어난다.

 

package Luxuryjava03;
import java.util.Scanner;
public class P0306 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("exit을 입력하면 종료쓰");
		while(true) {
			System.out.print(">>");
			String text=s.nextLine();    // nextLine 한줄단위입력
			if(text.equals("exit"))    // equals. 문자열 비교
				break;
		}
		System.out.println("종료데쓰...");
		s.close();
	}
}

 

 

 

 

7. 양수 5개를 입력받아 배열에 저장하고, 제일 큰 수를 출력하는 프로그램을 작성하라. #명품자바프로그래밍3장7번예제

 

package Luxuryjava03;
import java.util.Scanner;
public class P0307 {
   public static void main(String[] args){
   Scanner s=new Scanner(System.in);
  
   int intArray[]=new int[5];  //배열 생성
   int max=0;
   System.out.println("양수 5개를 입력하세요");
   for(int i=0; i<5; i++){   
   intArray[i] = s.nextInt();    // 입력받은 정수들을 배열에 저장
   if(intArray[i]>max)   //intArray[i]가 현재 가장 큰 수보다 크면
      max=intArray[i];
   }
  System.out.print("가장 큰 수는 "+max+"입니다.");
  s.close();
 }
}  // 양수 5개 1, 39, 78, 100, 99 중 가장 큰 수는 100입니다.

 

 

 

 

8. 배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력받고 평균을 구하는 프로그램을 작성하라. #명품자바프로그래밍3장8번예제 #배열원소평균

 

package Luxuryjava03;
import java.util.Scanner;
public class p0308 {
   public static void main(String[] args){
     int intArray[]=new int[5];
     int sum=0;

     Scanner s=new Scanner(System.in);
     System.out.print(intArray.length+"개의 정수를 입력하시오>>");
     for(int i=0; i<intArray.length; i++) {
        intArray[i]=s.nextInt();
        sum+=intArray[i];
     } 
     System.out.print("평균은 "+(double)sum/intArray.length);
     s.close();
  }
}

 

 

 

 

9. for-each문을 활용하는 사례를 보자. #명품자바프로그래밍3장9번예제

* for-each : for(데이터형 변수이름k : 변수이름n) ---> 반복될 때마다 k는 num[0], num[1], ...

* enum: 새로운 열거형을 선언하면 새로운 클래스형이 만들어짐

 

package Luxuryjava03;   
public class P0309 {
  enum Week{월,화,수,목,금,토,일}
   public static void main(String[] args){
   int []n= {1,2,3,4,5};
   String names[]={"사과", "배", "바나나", "체리", "딸기", "포도"};

   int smu=0;
   for(int k:n){
      System.out.print(k+" ");
      sum+=k;
   }
   System.out.println("합은"+sum);
   for(String s:names)
      System.out.print(s+" ");
   System.out.println();
   for(Week day: Week.values())
      System.out.print(day+"요일 ");
   System.out.println();
}
}

 

 

 

 

10. 2차원 배열에 학년별로 1,2학기 성적으로 저장하고, 4년간 전체 평점 평균을 출력하라. #명품자바프로그래밍3장10번예제

 

package Luxuryjava03;
public class P0310 {
   public static void main(String[] args){
     double score[][]={{3.3, 3.4},{3.5, 3.6},{3.7, 4.0},{4.1, 4.2}};
     double sum=0;
     for(int year=0; year<score.length; year++)
        for(int term=0; term<score[year].length; term++)
          sum+=score[year][term];      //전체 평점 합(for문을 두 번 돌기에 전체 평점 합이 가능)
     int n=score.length;
     int m=score[0].length;
     System.out.println("4년 전체 평점 평균은 "+sum/(n*m));
}
}  // 4년 전체 평점 평균은 3.725

 

 

 

 

11. 다음 그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하시오. #명품자바프로그래밍3장11번예제

 

 

package Luxuryjava03;
public class P0311 {
   public static void main (String[] args){
   intArray[][]=new int[4][];
   intArray[0]=new int[3];
   intArray[1]=new int[2];
   intArray[2]=new int[3];
   intArray[3]=new int[2];

   for(int i=0; i<intArray.length; i++)
     for(int j=0; j<intArray[i].length; j++)
       intArray[i][j]=(i+1)*10+j;     // 값을 초기화(입력)
   
   for(int i=0; i<intArray.length; i++){
     for(int j=0; j<intArray[i].length; j++)
        System.out.print(intArray[i][j]+" ");   //출력하면서 사이값 띄워주기
     System.out.println();
}}}

 

 

 

 

** 12. 정수 4개를 가지는 일차원 배열을 생성하고 1,2,3,4로 초기화한 다음, 배열을 리턴하는 makeArray()를 작성하고 이 메소드로부터 배열을 전달받아 값을 출력하는 프로그램을 작성하라. #명품자바프로그래밍3장12번예제

* 배열 리턴 과정 : int[] intArray; → makeArray(); //메소드실행 → intArray에 temp값 치환 → 초기화

 

package Luxuryjava03;
public class P0312 {
     static int[] makeArray(){
     int temp[] = new int[4];
     for(int i=0; i<temp.length; i++)
       temp[i]=i;     // 0, 1, 2, 3 초기화
     return temp;
     }
   public static void main(String[] args){
     int intArray[];    // 참조변수 선언
     intArray=makeArray();
     for(int i=0; i<intArray.length; i++)
       System.out.print(intArray[i]+" ");
}
}  // 0 1 2 3

 

 

 

 

13. 사용자가 명령행에 입력한 여러 개의 실수를 main()메소드에서 전달받아 합을 구하는 프로그램을 작성하라. #명품자바프로그래밍3장13번예제

* Double.parseDouble() : 매개변수로 주어진 문자열을 실수로 변환하는 함수.

 

package Luxuryjava03;
public class P0313 {
   public static void main(String[] args){
     double sum=0.0;
     for(int i=0; i<args.length; i++)
       sum+= Double.parseDouble(args[i]);
     System.out.println("합계:"+sum);
   }
}

 

 

 

 

14. 두 정수를 입력받아 나눗셈을 하고 몫을 구하는 프로그램 코드이다. 사용자가 나누는 수에 0을 입력하면 ArithmeticException 예외가 발생하여 프로그램이 강제 종료된다. #명품자바프로그래밍3장14번예제 #자바0으로나누기예외

 

package Luxuryjava03;
import java.util.Scanner;
public class P0314 {
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      int a, b;
      System.out.print("나눔당할 수:");
      a=s.nextInt();
      System.out.print("나눌수:");
      b=s.nextInt();
      System.out.println(a+"를"+b+"로 나누면 몫은 "+a/b+"입니다");
      s.close();
}
}

 

 

 

 

15. try-catch 블록을 이용하여 예제 3-14를 수정하여, 정수를 0으로 나누는 경우에 "0으로 나눌 수 없습니다!"를 출력하고 다시 입력받는 프로그램을 작성하라. #명품자바프로그래밍3장15번예제

* try{ } catch(){ } (finally{ }) 예외처리문

* ArithmeticException 예외 처리

 

package Luxuryjava03;
import java.util.Scanner;
public class P0315 {
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      while(true){
      System.out.print("나눔당할 수:");
      int a=s.nextInt();
      System.out.print("나눌수:");
      int b=s.nextInt();
      try{
         System.out.println(a+"를"+b+"로 나누면 몫은"+a/b+"입니다");
         break;
      }
       catch(ArithmeticException e){
          System.out.Println("0으로 나눌 수 없습니다! 다시입력하세요");
       }
      }
      s.close();
}
}

 

 

 

 

16. 배열의 인덱스가 범위를 벗어날 때 발생하는 ArrayIndexOutOfBoundsException을 처리하는 프로그램을 작성하시오. #명품자바프로그래밍3장16번예제

 

package Luxuryjava03;
public class P0316 {
   public static void main(String[] args){
      int[] intArray=new int[5];
      intArray[0]=0;
      try{
         for(int=0; i<5; i++){
            intArray[i+1]=i+1+intArray[i];
            System.out.println("intArray["+i+"]"+"="+intArray[i]);
         }
      }   
      catch(ArrayIndexOutOfBoundsException e){
         System.out.println("배열의 인덱스가 범위를 벗어났습니다.");
      }//  i가 4일 때
    }
}

 

 

 

 

17. 3개의 정수를 입력받아 합을 구하는 프로그램을 작성하라. 사용자가 정수가 아닌 문자를 입력할 때 발생하는 InputMismatchException 예외를 처리하여 다시 입력받도록 하라. #명품자바프로그래밍3장17번예제

 

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

 

 

 

 

18. 문자열을 정수로 변환할 때 발생하는 NumberFormatException을 처리하는 프로그램을 작성하라. #명품자바프로그래밍3장18번예제

 

package Luxuryjava03;
public class P0318 {
   public static void main(String[] args){
     String[] stringNumber={"23", "12", "3.1415", "998"};
     int i=0;
     try{
       for(i=0; i<stringNumber.length; i++){
        int j=Integer.parseInt(stringNumber[i]);
        System.out.println("숫자로 변환된 값은"+j);
         }
      }
      catch(NumberFormatException e){     // 3.1415에서 예외 발생해서 catch로 이동
          System.out.println(stringNumber[i] +"는 정수로 변환할 수 없습니다.");
      }
   }
}

 

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v