티스토리 뷰

JAVA

배열(Array)

springpark 2025. 3. 23. 14:19
반응형

 

 

 

 

 

배열(Array)

 

 

1. 1차원 배열

      1) 배열의 특징

              ● 동일한 자료형만 묶어서 저장 가능

                  //비교) 자바스크립트는 어떤 자료형이나 담을 수 있음.

                  //         [숫자,문자열,객체,배열]

              ● 생성시 크기를 지정, 이후 크기 변경 할 수 없음

       2) 배열의 선언

              ● 배열 선언시 어떤 자료형을 저장하는 배열인자 여부가 나타나야 함

자료형[] 변수명; 
		int[] num;  // int 배열 자료형 num;
 		int num[]; 
		
		- 모든 변수는 stack에 올라간다.
			int[] a;        	
			int[] a = null; 	 // 가리키고 있는 객체가 없다.
				. 참조자료형의 초기값은 null을 넣어야 함, 숫자를 넣으면 에러

 

 

         3) 배열의 객체 생성

                ● 배열 -> 여러 개의 값을 저장할 수 있는 공간

                ● heap 메모리에 생성

                    new 자료형[배열의 길이]

                ● 배열 객체 생성시에는 크기가 지정되어야 함

                    (int[] a = new int[]; //에러)

     // 방법1
			int[] a = new int[3];
			
			a[0] = 10;
			a[1] = 5;
			a[2] = 15;
                       
			// 방법2
      int[] a;
			a = new int[3];
			
			a[0] = 10;
			a[1] = 5;
			a[2] = 15;

			// 방법3
			int[] a = new int[]{10,5,15};
            // 여기 공간길이 넣으면 안됨
           // 뒷쪽 {}에서 모두 알려주기 때문
     
      // 방법4
			int[] a = {10,5,15};
		
			// 방법 5
      int[] a;
			a = new int[]{10,20,30}
        주의) int[] a;
             a = {10, 20, 30 } 안됨(X)

 

● new 키워드

      ○ 'heap 메모리에 넣어라'는 의미

      ○ jvm이 비워 있는 공간 객체를 생성하고 어느 공간에 넣었는지 알 수 없기 때문에 jvm은 객

        체의 위치 정보를 리턴 해 주어야 하고 이것을 담당하는 것이 new

      ○ 리턴된 값을 참조 변수에 저장(위치 주소)

 

● stack는 강제 초기화 되지 않음

● heap 메모리는 강제 초기화 됨(jvm이 알아서 초기화 시킴)

      ○ int - 0, double - 0.0, 참조 자료형(=타입) - null

      ○ long - 0L, float - 0.0f ....

 

4) 배열 객체의 값 대입

      ● 값 대입 : 참조_변수명[인덱스_번호] = 값;

      ● 값 읽기 : 참조_변수명[인덱스_번호]

          ○ a[0] = 2;

          ○ a[1] = 3;

 

5) 배열의 길이 : 배열명.length

       //문자열의 길이 : length()

 

6) 배열의 출력

        ● for(int i=0;i<배열명.length;i++)

        ● Array.toString(배열명); 배열을 문자열로 출력

        ● 항상된 for문 : for(타입 변수명 : 배열 또는 컬렉션) {  실행문  }

 

 

package day05.arrays;

public class ArrayExam01 {
    public static void main(String[] args) {
      //1. 배열 선언1
      int[] a;
      a = new int[3];

      //2. 값을 대입
      a[0] = 10;
      a[1] = 20;
      a[2] = 30;

      //3. 출력
      System.out.println("a[0] = " + a[0]);
      System.out.println("a[1] = " + a[1]);
      System.out.println("a[2] = " + a[2]);
    }
}

 

package day05.arrays;

import java.util.Arrays;

public class ArrayExam2 {
    public static void main(String[] args) {
        //1. 배열 선언2
        int[] arr = new int[3];
        arr[0] = 10;
        arr[1] = 20;
        arr[2] = 30;


      /*
        for(int i=0; i<3; i++){
            System.out.println("arr["+i+"]=" + arr[i]);
        }
      */
        //arr.length : 배열의 길이
        for(int i=0; i<arr.length; i++){
            System.out.println("arr["+i+"]=" + arr[i]);
        }
        System.out.println();
        //문자열로 모두 출력
        //Arrays.toString(배열명)
        System.out.println(Arrays.toString(arr));
    }
}

 

 

package day06.arrayexam;

import java.text.DecimalFormat;
import java.util.Arrays;

public class ArrayExam02 {
    public static void main(String[] args) {
        //1. 변수
        int[] scores = {90, 89, 50, 35, 99};
        int sum = 0;
        int max = scores[0], min = scores[0];
        double avg = 0.0;

        //2. 성적 처리
        // 성적 합계, 평균, 최댓값, 최솟값
        for(int i=0; i<scores.length; i++){
            sum += scores[i];

            //최댓값
            if(max < scores[i]){
                max = scores[i];
            }//end if

            //최솟값
            if(min > scores[i]){
                min = scores[i];
            }//end if
        }//end for

        avg = (double)sum / scores.length;

        //3. 성적 출력
        DecimalFormat f = new DecimalFormat("#,##0.00");
        // 패턴 : #,##0.00->천단위 구분기호(,)와
        //              소수이하 2자리까지 표현

        System.out.println("-----------");
        System.out.println("번호 점수");
        System.out.println("-----------");
        //int[] scores = {90, 89, 50, 35, 99};

        for(int i=0; i<scores.length; i++){
            System.out.println((i+1) + "\t " + scores[i]);
        }//end for
        System.out.println("-----------");
        System.out.println("총  계: " + sum);
        System.out.println("평  균: " + f.format(avg));
        System.out.println("최댓값: " + max);
        System.out.println("최솟값: " + min);
        System.out.println("인원수: " + scores.length);
    }//end main
}//end class

 

package day05.arrays;

public class ArrayExam03 {
    public static void main(String[] args) {
       int[] num = new int[]{10, 20, 30};

       for(int i=0; i<num.length; i++){
           System.out.println("num[" + i + "] = " + num[i]);
       }
        System.out.println("------------------");

       int[] score = {89, 90, 75};
       for(int i=0; i<score.length; i++){
            System.out.println("score[" + i + "] = " + score[i]);
       }
       System.out.println("------------------");

       for(int n : score){
           System.out.println(n);
       }
    }
}

 

● 문1)

 //입력 자료
 성적(score)  => {100, 88, 100, 90, 50}
 이름(name) => {"홍길동","김자바","이자바","박디비","송디비"}

 출력형태)
  ** 중간 성적 **
  ---------------------
   번호   이름    성적
  ---------------------
    1   홍길동   100
    2   김자바    88
  ....
  --------------------
  전체 인원수 : 5명
  전체 합계 : ~~
  전체 평균 : ~~

 

package day05.arrays;

import java.text.DecimalFormat;

/*
 성적(score)  => {100, 88, 100, 90, 50}
 이름(name) => {"홍길동","김자바","이자바","박디비","송디비"}

 출력형태)
  ** 중간 성적 **
  ---------------------
   번호   이름    성적
  ---------------------
    1   홍길동   100
    2   김자바    88
  ....
  --------------------
  전체 인원수 : 5명
  전체 합계 : ~~
  전체 평균 : ~~
 */
public class ArrayExam04 {
    public static void main(String[] args) {
        //int[] score = new int[]{100, 88, 100, 90, 50};
        //int[] score;
        // score = new int[]{100, 88, 100, 90, 50};
        //String[] name = new String[]{"홍길동","김자바","이자바","박디비","송디비"};
        //1. 변수 선언과 초기화
        int[] score = {100, 88, 100, 90, 50};
        String[] name = {"홍길동","김자바","이자바","박디비","송디비"};
        int sum = 0;
        int counter = 0; //name.length을 사용해도 됨
                         // 배열의 길이가 곧 인원수가 될 수 있으므로
        double avg = 0.0;

        //2. 계산 작업(합계, 평균, 인원수)
        for(int i=0; i<score.length; i++){
            //2-1. 인원수
            //counter++;  // counter = score.length

            //2-2. 합계
            sum += score[i]; // sum = sum + score[i];
        }
        //2-2. 인원수
        counter = score.length;

        //2-3. 평균
        //avg = sum / counter;  //정수 / 정수  -> 정수
        avg = (double) sum / counter;
        //avg=(double) sum /score.length;
        //avg=(double) sum /(double)score.length;

        //3. 출력
        System.out.println("----------------------");
        System.out.println("번호\t 이름\t 성적");
        System.out.println("----------------------");

        for(int i=0; i<name.length; i++){
            System.out.printf("%d\t  %s\t  %d\n", (i+1),name[i],score[i]);
        }
        System.out.println("----------------------");
        //System.out.println("전체 인원수 : " + counter + "명");
        //System.out.println("전체 합계 : " + sum + "점");
       // System.out.println("전체 평균 : " + avg + "점");

        //DecimalFormat f1 = new DecimalFormat("#,##0원");//패턴-문자열
        //DecimalFormat f1 = new DecimalFormat("0.00");
        DecimalFormat f1 = new DecimalFormat("0명");
        DecimalFormat f2 = new DecimalFormat("0.0점");

        System.out.println("전체 인원수 : " + f1.format(counter));
        System.out.println("전체 합계 : " + sum + "점");
        System.out.println("전체 평균 : " + f2.format(avg));


    }//end main
}//end class

 

● 문2) 다음 자료의 최댓값과 최솟값을 구하는 프로그램을 작성하시오.

         점수(score) { 79,88,33,100,50,90 }

package day05.arrays;
/*
문2) 다음 자료의 최댓값과 최솟값을 구하는 프로그램을 작성하시오.
    점수(score) { 79, 88, 33, 100, 50, 90 }
 */
public class ArrayExam05 {
    public static void main(String[] args) {
        //1. 변수 선언
        int[] score = { 79, 88, 33, 100, 50, 90 };
        int max = score[0]; // 첫 번째 요소
        // max = 0; //제시된 값들 보다 훨씬 작은 값
        // max = Integer.MIN_VALUE; //정수 타입의 최솟값
        int min = score[0]; // 첫 번째 요소
        // min = 999; //제시된 값들 보다 훨씬 큰 값
        // min = Integer.MAX_VALE; // 정수 타입의 최댓값

        //2. 최댓값/최솟값 구하기
        for(int i=0; i<score.length; i++){
            //int[] score = { 79, 88, 33, 100, 50, 90 };
            //2-1.최댓값
            if(max < score[i]){
                max = score[i];
            }

            //2-2. 최솟값
            if(min > score[i]){
                min = score[i];
            }
        }//end for

        //3. 출력
        System.out.println("최댓값 : " + max);
        System.out.println("최솟값 : " + min);
    }
}

 

 

● 문3) 정수를 하나 입력 받아 그 입력 받은 값과 같은 값이 배열의 몇 번째 요소인지 구하기, 없으면 없다고 출력하기

 number = { 79, 88, 33, 100, 50, 90 };

출력형태)
  1) 찾는 값 있을 때
  	찾는 값 : ~~
  	배열의 요소 위치 : ~~
  2) 찾는 값 없을 때
	찾은 값이 없습니다.

 

package day05.arrays;

import java.util.Scanner;

/*
정수를 하나 입력 받아 그 입력 받은 값과
같은 값이 배열의 몇 번째 요소인지 구하기,
없으면 없다고 출력하기

number = { 79, 88, 33, 100, 50, 90 };

출력형태)
  1) 찾는 값 있을 때
  	찾는 값 : ~~
  	배열의 요소 위치 : ~~
  2) 찾는 값 없을 때
	찾은 값이 없습니다.


 */
public class ArrayExam06 {
    public static void main(String[] args) {
        //1. Scanner  객체 생성
        Scanner scan = new Scanner(System.in);
        //2. 변수 선언과 초기화
        int count = 0; //마지막을 점검하기 위한 것
        int inputNum = 0;

        //3. 배열 선언과 초기화
        int[] score = {79, 88, 33, 100, 50, 90};

        //4. 숫자 입력받기
        System.out.print("정수 입력>> ");
        inputNum = scan.nextInt();

        //5. 값 찾기
        for(int i=0; i<score.length; i++){
            //진행 횟수
            count++; // count += 1;  count = count + 1;

            // 값 비교
            if(inputNum == score[i]){
                System.out.println("찾는 값 : " + score[i]);
                System.out.println("배열의 위치 : " + i + "번째 요소");
                break; //for 반복을 종료
            }//end of if
            
            // 배열 요소를 모두 비교했는지
            if(count >= score.length){
                System.out.println("찾는 값이 없음");
            }//end of if
        }//end for
    }
}

 

● 문4) num = {1,2,3,4,5,6,7,8,9,10} 숫자를 임의로 섞어서 출력하는 프로그램 작성

package day05.arrays;

import java.util.Arrays;

// num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// 숫자를 임으로 섞어서 출력하는 프로그램 작성
public class ArrayExam07 {
    public static void main(String[] args) {
      //1. 변수선언과 초기화
        int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        System.out.println("변경 전 : " + Arrays.toString(num));

        //2. 배열 섞기
        for(int i=1; i<=100; i++){
            //값 교환할 인덱스 번호
            int n = (int)(Math.random()*10);//0 ~ 9, 임의의 인덱스
            int temp = 0; //자리 바꿈을 위한 임시 변수

            temp = num[0];
            num[0] = num[n];
            num[n] = temp;

            /*
            //자리 바꿈의 과정을 확인해 보기
            for(int j=0; j<num.length; j++){
                System.out.println(num[j] + ",");
            }//안쪽 for
            System.out.println("자리 바꿈 과정 확인 :" + Arrays.toString(num));
            System.out.println();
           */
        }//end for

        //변경 후 배열
        System.out.println("변경 후 : "+Arrays.toString(num));


    }
}

 

 

● 문5) 로또 번호 출력하는 프로그램 작성하시오.

package day05.arrays;

import java.util.Arrays;

//로또 번호 출력하는 프로그램작성
public class ArrayExam08 {
    public static void main(String[] args) {
        //1. 배열 공간 45개 확보
        int[] lotto = new int[45];

        //2. 배열의 요소로 1 ~ 45까지 담기
        for(int i=0; i<lotto.length; i++){
            lotto[i] = i + 1;
        }
        //3. 배열 내용을 출력
        System.out.println(Arrays.toString(lotto));

        //4. 로또 번호 섞기
        for(int i=0; i<1000; i++){
            //자리 바꿀 인덱스를 무작위로 선정
            int n = (int)(Math.random()*45);
            int k = (int)(Math.random()*45);
            int temp = 0;

            //자리 바꿈
            temp = lotto[n];
            lotto[n] = lotto[k];
            lotto[k] = temp;
        }//end for

        System.out.println(Arrays.toString(lotto));

        //로또 번호 출력1
        for(int i=0; i<6; i++){
            System.out.print(lotto[i] + "  ");
        }//end for
        System.out.println();

        //로또 번호 출력2
        for(int i=20; i<26; i++){
            System.out.print(lotto[i] + "  ");
        }//end for
        System.out.println();

    }//end main
}//end class

 

 

● 문6) 학생 수와 점수를 입력 받아서, 평균 점수와 최고 점수, 최저 점수를 출력

  교재) 224페이지 참조

 

package day05.arrays;

import java.text.DecimalFormat;
import java.util.Scanner;

public class StudentArray01 {

    public static void main(String[] args) {
        //1. Scanner 객체 생성
        Scanner scan = new Scanner(System.in);

        //2. 변수 선언 및 초기화 - 지역 변수(local variable)
        int studentCount = 0;//학생수
        int[] scores = null;
        //배열은 한 번 크기를 설정하면 변경할 수 없음
        // null - 아직 참조하는 곳이 없음,
        // heap 메모리 영역에 아직 배열 공간이 생성하지 않음
        // 그래서 아직은 참조 하지 않는다.ru
        
        //3. 학생수, 점수....
        while(true){
            String selectNo = null; //selectNo = ""

            //3-1. 메시지 반복 처리
            System.out.println("----------------------------------------------------------");
            System.out.println("1.학생수 | 2.점수입력 | 3.점수 리스트 | 4.분석 | 5. 종료");
            System.out.println("----------------------------------------------------------");
            System.out.print("번호 선택>> ");
            selectNo = scan.nextLine(); //문자열

            if(selectNo.equals("5")){
                System.out.println("종료 선택");
                break; //while 문을 종료
            }//end if


            if(selectNo.equals("1")){//1.학생수
                System.out.print("학생수>> ");
                studentCount = Integer.parseInt(scan.nextLine());

                //입력받은 학생수로 배열 공간을 확보
                scores = new int[studentCount];

            }else if(selectNo.equals("2")){//2.점수 입력
                //학생수 만큼의 점수를 입력 받기
                for(int i=0; i<scores.length; i++){
                    System.out.print((i+1) + "번 학생 점수 입력>> ");

                    //입력 받은 점수 배열에 담기
                   // scores[i] = scan.nextInt();
                   //scan.nextLine();
                    scores[i] = Integer.parseInt(scan.nextLine());

                }//end for

            }else if(selectNo.equals("3")){ //3.점수 리스트
                //배열의 내용을 확인
                for (int i=0; i<scores.length; i++){
                    System.out.println((i+1) + "번째 학생 점수 : " + scores[i]);
                }//end of for

            }else if(selectNo.equals("4")){ //4.분석
                int sum = 0;
                int max = scores[0];
                int min = scores[0];
                double avg = 0.0;

                //최고 점수, 최저 점수, 합계
                for(int i=0; i<scores.length; i++){
                    sum += scores[i];

                    if(max < scores[i]){
                        max = scores[i];
                    }//end if

                    if(min > scores[i]){
                        min = scores[i];
                    }//end if
                }//end for

                //평균
                avg = (double)sum / studentCount;
                //avg = (double)sum / scores.length;

               // DecimalFormat f = new DecimalFormat("0.00");

                System.out.println("최고 점수 : " + max);
                System.out.println("최저 점수 : " + min);
                //System.out.println("평균 점수 : " + f.format(avg));
                System.out.printf("평균 점수 : %.2f\n", avg);
                System.out.println();

            }else{ //입력오류
                System.out.println("입력 오류");
            }//end if

        }//end while
        System.out.println("프로그램 종료");
    
    }//end main
}//end class

 

 

● 문7) 음료를 주문하는 프로그램을 작성하시오.

 

 

package day06.arrayexam;

import java.text.DecimalFormat;
import java.util.Scanner;

public class BeverageExam02 {
    public static void main(String[] args) {
        //1. 입력을 위한 스캐너 객체
        Scanner scan = new Scanner(System.in);

        //2. 변수 선언 및 초기화 - 음료관련 배열로 처리
            //2-1. 음료
        String[] beverage = {"아메리카노","라      떼","콜      라","홍      차"};
            //2-2  음료 가격
        int[] price = {2500, 4500, 1500, 5500};
            //2-3. 주문 수량
        int[] orderNum = new int[4];
            //2-4. 음료별 총 주문 금액
        int[] totalMoney = new int[4];
            //2-5. 총 결제 금액(= 총 주문액 )
        int allAmount = 0;
            //2-6. 총 음료 주문 수량
        int allOderNum = 0;

            //2-7. 금액을 표시하기 위한 패던
        DecimalFormat f = new DecimalFormat("#,##0원");


        //3. 입력 처리
        while(true){
            int orderNo = 0;//주문 번호
            int orderCount = 0;//주문 수량
            int orderYesNo = 0; //주문 진행 여부

            System.out.println();
            System.out.println("#1. 주문하시겠습니까?");
            System.out.println("---------------------------");
            System.out.println("1. 주문 계속 | 2. 주문 종료");
            System.out.println("---------------------------");
            System.out.print("번호 선택>> ");
            orderYesNo = scan.nextInt();

            if(orderYesNo == 2){
                System.out.println("주문 종료 선택하셨습니다.");
                break;  //while문을 종료
            }else if(orderYesNo != 1){
                System.out.println("입력 오류, 다시 입력하세요.");
                continue;  // while문의 조건 부분으로 이동
            }//end if

            System.out.println();
            System.out.println("#2. 음료 번호를 선택하세요...");
            System.out.println("---------------------------------------------------------");
            System.out.println("1.아메리카노(2500)|2.라떼(4500)|3.콜라(1500)|4.홍차(5500)");
            System.out.println("---------------------------------------------------------");
            System.out.print("음료 선택>> ");
            orderNo = scan.nextInt();
            System.out.print("주문 수량 입력>> ");
            orderCount = scan.nextInt();
            System.out.println();

            // 해당 음료의 주문 수량을 누적
            //음료 번호는 1부터 시작, 인덱스는 0부터 시작
            orderNum[orderNo-1] += orderCount;
        }//end while


        //4. 계산 처리
        for(int i=0; i<beverage.length; i++){
            //주문 수량이 없으면 계산할 필요 없음
            if(orderNum[i] == 0){
                continue; // for의 증감식 부분으로 이동
            }//end if

            //각 음료별 주문 금액  = 주문수량 * 가격
            totalMoney[i] = orderNum[i] * price[i];

            //총 결제 금액(총 주문 금액)
            allAmount += totalMoney[i];

            //총 음료 주문 수량
            allOderNum += orderNum[i];
        }//end for


        //5. 출력 처리
        System.out.println();
        System.out.println("*** 음료 주문 현황 ***");
        System.out.println("------------------------------------------------");
        System.out.println("음료명       주문가격     주문수량    주문금액");
        System.out.println("------------------------------------------------");

        for(int i=0; i<beverage.length; i++){
            //주문 수량이 없다는 것은 주문이 없다는 것이므로 출력에서 제외
            if(orderNum[i] == 0){
                continue;
            }//end if

            //음료명       주문가격     주문수량     주문금액
            System.out.printf("%s\t\t %s\t %d잔\t %s\n",
                    beverage[i], f.format(price[i]),orderNum[i],
                    f.format(totalMoney[i]) );
        }//end for

        System.out.println("------------------------------------------------");
        System.out.println("총 주문 수량 : " + allOderNum + "잔");
        System.out.println("총 주문 금액 : " + f.format(allAmount));

    }//end main
}//end class

 

 

 

 

2. 2차원 배열

        ● 가로 및 세로 방향으로 정렬된 배열

        ● 메모리는 데이터를 1차원으로만 저장 가능

            2차원 데이터를 저장하기 위해서는 1차원(행 단위)으로 나누어 저장

            1차원 배열을 원소로 가지는 1차원 배열

 

자료형[][]  변수명 = new 자료형[행의 길이][열의 길이]

int[][] num = new int[2][3]; 
     // 행의길이:2, 열길이:3
int[][] num1 = new int[2][]; 
   // 초기 선언시 행의 길이는 반드시 
   // 넣어 주어야 하지만
   // 열의 길이는 생략 가능, 실제 사용하기 
   // 전에 열의 길이를 반드시 선언해야 함

int[][] num;
num = new int[2][3];


int[][] num = new int[2][];
num[0] = new int[3];
num[1] = new int[2];


자료형[][] 참조변수명 = new 자료형[][]{{값1, 값2,..,값n}, ...{값1, 값2,..., 값n}}

자료형[][] 참조변수명 = {{값1, 값2,..,값n}, ...{값1, 값2,..., 값n}}

 

● 배열의 길이 : 행 - 배열명.length

      ○ 열 - 배열명[행의 인덱스].length

 

package day06.arrayexam;

import java.util.Arrays;

public class ArrayExam03 {
    public static void main(String[] args) {
        int[][] scores = {
                {100, 20, 40},
                {89, 90, 95},
                {70, 67, 98}
        };
        //scores[0][0] = 30;
        System.out.println(scores[0][0]); //100
        System.out.println(scores[0][1]); //20
        System.out.println(scores[0][2]);//40
        System.out.println(scores[1][0]); //89
        System.out.println(scores[1][1]); //90
        System.out.println(scores[1][2]); //95
        System.out.println(scores[2][0]); //70
        System.out.println(scores[2][1]); //67
        System.out.println(scores[2][2]); //98

        for(int i=0; i<scores.length; i++){
            //System.out.println(scores[i]); //[I@b4c966a,...
            for(int k=0; k<scores[i].length; k++){
                System.out.println(scores[i][k]);
            }//안 for
        }//밖 for

    }//end main
}//end class

 

 

3. 항상된 for문

      ● 배열이나 컬렉션을 좀 더 쉽게 처리하기 위해 항상된 for 문을 제공

for(타입 변수명 : 배열 또는 컬렉션){
     
     실행문
 
 }

 

● 문1)

단어 맞추기 게임을 작성하시오.
한글 단어 과일의 이름을 제시하고 영어로 그 뜻을 맞추기

. 한국어 과일 : 사과, 수박, 복숭아, 딸기, 귤
. 영어 과일 : "apple","watermelon", "peach", "strawberry", "tangerine"
   => 2차원 배열
   => String[][] fruits    행의 i번째 열[0]-한글단어, 열[1]-영문단어
	fruits[0][0] - 한글 과일이름
	fruits[0][1] - 영어 과일 이름
. 질문은 한글로 하기
. 질문에 답 영어로 받기 : String userResponse
          
. 정답일때 / 오답일때 => if ~ else
            => if(userResponse.equals(fruits[i][1])){
 	       
		}else{      }

 . 반복해서 묻기 : 가지고 있는 단어 범위에서만 반복 => for문, 과일개수



출력형태 )
질문 >> "apple"의 한국어 과일 이름은?

정답일 경우 : 정답입니다.
오답일 경우 : 오답입니다.
	      정답은 '사과' 입니다.

 

 

package day06.arrayexam;

import java.util.Scanner;

public class ArrayExam05 {
    public static void main(String[] args) {
        //1. 스캐너 객체 생성
        Scanner scan = new Scanner(System.in);

        //2. 배열 - 과일이름 - 한글, 영어
        String[][] fruits = {
                {"사과", "apple"},
                {"수박", "watermelon"},
                {"복숭아", "peach"}
        };

        //3. 질문과 응답
        for(int i=0; i<fruits.length; i++){ //행

            //질문에 대한 사용자의 응답
            String userResponse = null; //""

            System.out.println();
            System.out.printf("[질문%d] '%s'에 대한 영문 과일 이름은?\n",
                    (i+1),fruits[i][0]); //한글
            System.out.print("답 >> ");
            userResponse = scan.nextLine();

            //판단 - 정답인지 오답인지
            if(userResponse.equals(fruits[i][1])){//영문
                System.out.println("정답입니다.");
            }else{
                System.out.println("오답입니다.");
                System.out.println("정답은 " + fruits[i][1] + "입니다.");
            }//end if

        }//end for
        
    }//end of main

}//end of class

 

● 문2)

 

package day06.arrayexam;

public class ArrayExam04_1 {
    public static void main(String[] args) {
        //1. 변수 선언과 초기화
        int[][] scores = {
                {95, 83, 65},
                {76, 95, 100},
                {45, 80, 99},
                {80, 90, 70}
        };

        int korSum=0, engSum=0, matSum=0, sum=0;
        double avg = 0.0;
        System.out.println("------------------------------------");
        System.out.println("번호 국어  영어  수학   총점  평균");
        System.out.println("------------------------------------");

        for(int i=0; i<scores.length; i++){//행-개별
            //전체 과목별 합계
            korSum += scores[i][0];
            engSum += scores[i][1];
            matSum += scores[i][2];

            //번호 -> 행index + 1
            System.out.printf("%4d",(i+1));
            //System.out.print((i+1) + "\t");

            //열
            for(int k=0; k<scores[i].length; k++){
                //개별 성적 합계
                sum +=  scores[i][k];

                //개별 과목 점수 출력
                System.out.printf("%5d", scores[i][k]);
            }//안 for
            System.out.printf("%8d", sum);

            //       개별 합계  / 열의 개수
            avg = (double) sum / scores[i].length;
            System.out.printf("%8.2f\n", avg);
        }//밖 for

        System.out.printf("총점 : %3d %3d %3d\n",
                korSum,engSum,matSum);

    }//end main
}//end class

 

 

● 문3)

 

 

package day06.arrayexam;

import java.util.Scanner;

public class ArrayExam06 {
    public static void main(String[] args) {
        //1. 스캐너 객체 생성
        Scanner scan = new Scanner(System.in);

        //2.숫자 입력 받기
        System.out.print("숫자 입력>> ");
        int num = scan.nextInt(); //행과 열을 결정

        //3. 시작
        int value = 1;

        //4. 출력
        for(int i=0; i<num; i++){//행
            System.out.print((i+1)+ "=>    "); //줄바꿈 안함

            for(int k=0; k<num; k++){ //열
                System.out.printf("%5d", value);
                value += num;
            }//안쪽 for
            System.out.println();//줄바꿈
        }//밖 for
        
    }//end main
}//end class

 

 

문 4)

 

 

import java.text.DecimalFormat;
import java.util.Scanner;

public class ArrayExam {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    //1. 학생 수 입력받기
    System.out.print("학생수를 입력>> ");
    int studentNum = Integer.parseInt(scan.nextLine());

    //2. 이름과 학과 배열공간 확보
    String[][] name = new String[studentNum][2];

    //3. 성적 점수 입력할 공간 확보
    int[][] scores = new int[studentNum][3];

    //4. 개별 합계, 평균, 학점, 석차
    int[] sum = new int[studentNum];
    double[] avg = new double[studentNum];
    String[] grade = new String[studentNum];
    int[] rank = new int[studentNum];

    //5. 학생 수 만큼 이름과 학과를 입력 받기
    for(int i=0; i<name.length; i++){
         System.out.println("이름과 학과 순서대로 입력 >> ");
         for(int j=0; j<name[i].length; j++){
           name[i][j] = scan.nextLine();
           //확인용 - 나중에 주석 처리
           //System.out.println(name[i][j] + "=" + name[i][j] );
         }
    }
    System.out.println();

    //6. 성적 입력 받기
    System.out.println("성적 입력>> ");
    for(int i=0; i<scores.length; i++){
      int personalSum = 0;
      double personalAvg = 0.0;
      rank[i] = 1;

      for(int k=0; k<scores[i].length; k++){
        scores[i][k] = Integer.parseInt(scan.nextLine());

        personalSum += scores[i][k];
      }
      System.out.println("---------------");

      personalAvg = (double) personalSum /scores[i].length;
      sum[i] = personalSum;
      avg[i] = personalAvg;

      //7.학점
      if(avg[i] >= 90){
        grade[i] = "A";
      }else if(avg[i] >= 80){
        grade[i] = "B";
      }else if(avg[i] >= 70){
        grade[i] = "C";
      }else if(avg[i] >= 60){
        grade[i] = "D";
      }else{
        grade[i] = "F";
      }
    }

    //8. 석차 구하기
    for(int i=0; i<avg.length; i++){
      for(int k=0; k<avg.length; k++){
        if(avg[i]<avg[k]){
          rank[i] +=1;
        }
      }
    }

    //9. 출력
    DecimalFormat f = new DecimalFormat("#,##0.0");
    System.out.println("---------------------------------------------------------------------");
    System.out.println("번호\t이름\t학과\tDB\tSW\tPG\t합계\t평균\t학점\t석차");
    System.out.println("---------------------------------------------------------------------");

    for(int i=0; i<studentNum; i++){
      System.out.print((i+1)+"\t");

      //이름과 학과
      for(int k=0;k<name[i].length; k++){
        System.out.print(name[i][k]+"\t");
      }

      //과목별 성적
      for(int j=0; j<scores[i].length; j++){
        System.out.print(scores[i][j]+"\t");
      }
      //합계, 평균, 학점 석차
      System.out.println(sum[i]+"\t"+f.format(avg[i])+"\t"+grade[i]+"\t"+rank[i]);
      System.out.println();
    }
    System.out.println();

System.out.println();
		
		System.out.println("-------------------------");
		System.out.print("# 개인성적을 보고 싶은 학생의 번호 입력>>");
		int no = Integer.parseInt(scan.nextLine());
		
		for(int i=0; i<studentNum; i++) {
			
			//번호는 (i+1)로 처리했으므로, i+1과 입력된 번호가 같은지 체크해서 처리
			if((i+1) == no) {
				//개인성적표 출력
				System.out.println("*** " + name[i][0] + "님의 개인 성적표 ***"); // name[i][0] - 이름,  name[i][] - 학과
				System.out.println();
				
				//입력받은 학생으이 개인 성적표 자료를 출력하기
				System.out.println("================================================================================");
				System.out.println("번호\t 이름\t 학과\t DB\t SW\t PG\t 합계\t 평균\t 학점\t 석차");
				System.out.println("================================================================================");
				
				//번호
				System.out.print((i+1) + "\t ");
				
				//이름과 학과 - 배열에 담아 놓았기에 for사용
				for(int j=0; j<name[i].length; j++) {
					System.out.print(name[i][j] + "\t ");
				}//이름과 학과 for문 끝
				
				//성적 - 배열로 담아 놓음, for
				for(int j=0; j<scores[i].length; j++) {
					System.out.print(scores[i][j] + "\t ");
				}//성적 for문 끝
				
				//합계, 평균, 학점, 석차
				System.out.print(sum[i] + "\t " + avg[i] + "\t ");
				System.out.print(grade[i] + "\t " + rank[i] + "\t ");
				System.out.println();
				
				//해당 학생의 자료를 출력했으면 반복문 빠져나가기
				break;  //개인 성적 출력이라서
				
			}//end of if
		
		}//밖for문끝		
		
	}//end of main

}//end of class

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

객체 지향  (0) 2025.03.23
Method  (1) 2025.03.23
문자열  (0) 2025.03.23
참조 타입과 참조 변수  (1) 2025.03.23
반복문 예제 풀이  (1) 2025.03.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/10   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함