교재 : JAVA 프로그래밍 기초 - 18. 클래스 라이브러리

+ 자바의 정석[기초편]

클래스 라이브러리

JAVA 표준 클래스 라이브러리에 있는 다양한 클래스들 활용해보기!

 

클래스 사용 프로그램 순서

① 클래스 코드 작성 → 클래스 파일 생성 

② 클래스를 이용한 코드 작성 → 클래스를 인스턴스화 하고 클래스의 멤버(변수&메소드)를 사용

클래스 라이브러리를 이용하면 ②번부터 코드 기술 가능

 

지금까지 사용해본 클래스 라이브러리

package chap18;

import java.util.Scanner;

public class Sample {

    public static void main(String[] args) {
        try {
            // Scanner클래스 인스턴스화 
            Scanner sin = new Scanner(System.in);

            System.out.print("이름 입력: ");
            String name = sin.next(); // 키보드에서 문자입력

            System.out.print("나이 입력: ");
            int age = sin.nextInt(); // 키보드에서 숫자 입력 

            // 결과 표시 
            System.out.println("이름은 " + name + "이고 나이는 " + age + "살입니다.");

        } catch (Exception e) {
            System.out.println(e + "라는 예외가 발생하였습니다.");
        }
    }
}

▶ 해당 소스코드에서 사용되는 클래스

  • Scanner : 텍스트 입력을 처리하는 클래스
  • System : 시스템과 관련된 다양한 기능을 제공하는 클래스
  • String : 문자열을 다루는 클래스
  • Exception : 예외를 다루는 클래스

 

 


 

 

String 클래스

String 클래스 : 문자열을 위한 클래스

                         문자열을 저장하고 이를 다루는데 필요한 메소드를 함께 제공함

 

[문자열 만드는 법]

① 문자열 리터럴을 지정

String str = “Hello World!”;

 

② String클래스의 생성자를 사용

String str = new String(“Hello World!”);

 

 

 

String 클래스 메소드

char charAt(int index)

지정된 위치(index)에 있는 문자 하나를 알려준다.

        String str = "Java 프로그래밍!"; // 문자열 설정
        char ch1 = str.charAt(0); // 문자 얻기

 

int length()

문자열의 길이를 알려준다.

String str = "Java 프로그래밍!"; // 문자열 설정
int len = str.length(); // 문자열 길이

 

boolean equals(Object anObject)

매개변수로 받은 문자열(obj)과 String인스턴스의 문자열을 비교한다.

같으면 true, 다르면 flase

String s = "Hello"
boolean b =s.equals("Hello"); // true
boolean b2 = s.equals("hello"); // false

※ 주의 : 'equals' 메소드는 문자열을 비교할 때 사용,

               '=='는 기본 자료형(int, double, boolean 등)을 비교할 때 사용

 

package chap18;

public class StringEquals {

    public static void main(String[] args) {
        // 변수선언
        String str1 = "안녕하세요.";
        String str2 = "방가방가";
        String str3 = "안녕!";
        String str4 = "방가방가";

        // 변수와 지정된 문자열로 비교
        if (str1.equals("안녕하세요.")) {
            System.out.println("str1(" + str1 + ")의 문자열은 안녕하세요와 동일합니다");
        }

        // 변수와 변수로 비교하기
        if (str2.equals(str4)) {
            System.out.println("str2(" + str2 + ") 및 str4(" + str4 + ")의 문자열은 동일합니다.");
        }

        // 문자열이 지정된 문자열과 다른 경우의 판정 방법
        if (!str2.equals(str3)) {
            System.out.println("str2(" + str2 + ") 및 str3(" + str3 + ")의 문자열은 동일하지 않합니다.");
        }
    }
}

 

 

 

String substring(int beginIndex, int endIndex)

주어진 시작 위치(bgin)부터 끝 위치(end)범위에 포함된 문자열을 얻는다.

시작 위치는 범위에 포함 / 끝 위치는 범위에 포함 X

String s = "java.lang.Object";
String c = s.substring(10); // c = "Object"
String b = s.substring(5, 9); // b = "lang"

 

 

public String [] split(String regex)

기호로 문자열 분할하기

regex : 문장 분할하는 기호 ( , : / )

 String str = "AB:CD:EF";
 String[] strArray = str.split(":");

 

 

 

래퍼 클래스 (wrapper class)

기본형 변수도 객체로 다뤄야하는 경우에 래퍼 클래스를 사용한다.

래퍼 클래스들은 객체생성 시에 생성자의 인자로 주어진 각 자료형에 알맞은 값을 내부적으로 저장하고 있다.

기본형 래퍼클래스 생성자 활용예
boolean Boolean Boolean(boolean value)
Boolean(String s)
Boolean b = new Boolean(true);
Boolean b2 = new Boolean("true");
char Character Character(char value) Character c = new Character('a');
byte Byte Byte (byte value)
Byte (String s)
Byte b = new Byte(10);
Byte b2 = new Byte("10");
short Short Short (short value)
Short (String s)
Short s = new Short(10);
Short s2 = new Short("10");
int Integer Integer (int value)
Integer (String s)
Integer i = new Integer(100);
Integer i2 = new Integer("100");
long Long Long (long value)
Long (String s)
Long 1 = new Long(100);
Long 12 = new Long("100");
float Float Float (double value)
Float (float value)
Float (String s)
Float f = new Float(1.0);
Float f2 = new Float(1.0f);
Float f3 = new Float("1.0f");
double Double Double (double value)
Double (String s)
Double d = new Double(1.0);
Double d2 = new Double("1.0");

 

 

 

 

클래스형 변수

클래스형 변수(객체 변수) : 객체를 가리키는 변수  (변수내에 객체의 위치 정보를 보관 유지함)

   ※ 강사님이 인스턴스 변수, 참조형 변수 등을 더 큰 의미로 클래스형 변수라고 총칭하는듯 하다.. 이거 때문에 너무 헷갈렸음.. 

 

애초에 클래스 자체가 '객체를 정의해 놓은 것'이니 클래스형이란 객체를 정의해 놓은 형태로 봐도 될 듯 하다.

클래스도 형태가 되므로 메소드/인수/반환값에 이용할 수 있다.

    

인스턴스 변수 :  같이 합치지 못하고 따로 설정해야하는 변수에 사용

                           인스턴스가 생성될 때 마다 만들어지므로 인스턴스마다 각기 다른 값을 유지한다.

omputer com = new Computer(); // Computer 객체변수 com

 

클래스형 변수는 클래스 변수와 다름! 차이점을 알아두자.

클래스 변수(static 변수) : 변수 앞에 static 키워드가 붙는다.
                                         모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다.
                                         (메모리를 공유하기 위한 용도로 자주 사용된다.)

 

객체 변수 대입하기

클래스명 변수1 = new 클래스명();
클래스명 변수2;
변수2 = 변수1;
Computer com1 = new Computer();
Computer com2;
com2 = com1;

기본 데이터형(기본형 매개변수)과 다르게 오브젝트내의 데이터가 카피되지 않고 오브젝트의 주소가 복사되는 것.(참조형)

기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.(read only) - 값이 복사됨
참조형 매개변수 : 변수의 값을 읽고 변형할 수 있다.(read & write) - 인스턴스 주소가 복사됨

 

메소드 인수에 참조형 변수 넣기

package chap18;

public class Computer2 {
    private String os;
    private int memory;

        // 생성자
    public Computer2() {
        this.os = "";
        this.memory = 0;
        System.out.println("PC를 만들었습니다.");
    }

  /*
  * 접근자 메소드
  */
    public String getOs() {
        return os;
    }

    public int getMemory() {
        return memory;
    }

    public void setOs(String os) {
        this.os = os;
    }

    public void setMemory(int memory) {
        this.memory = memory;
    }

    public void show() {
        System.out.println("PC OS는 " + this.os + "입니다.");
        System.out.println("메모리는 " + this.memory + "GB입니다.");
    }
}
package chap18;

public class ObjectAsArgument {
  /*
  * 인수에 클래스형 변수의 Computer2 객체 정보를 받아, OS의 메모리 크기 체크를 합니다.
  */
    public static void checkMemory(Computer2 com) {
        int reasonableMemory; //알맞은 메모리값 저장변수
        String os = com.getOs(); // 인수의 클래스형 변수로부터 OS명을 얻음
        int memory = com.getMemory(); //인수의 클래스형 변수로부터 메모리 크기 얻음 
        com.show(); //PC정보 표시 

        //OS명으로부터 알맞은 메모리 크기 판정
        if (os.equals("Windows11")) {
            //OS Windows 11인 경우 
            reasonableMemory = 32;
        } else if (os.equals("Windows 10")) {
            //OS Windows 10인 경우
            reasonableMemory = 16;
        } else {
            // 기타
            reasonableMemory = 8;
        }

        // 알맞은 메모리 크기 확인
        if (memory >= reasonableMemory) {
            System.out.println("메모리 크기는 알맞습니다.");
        } else {
            System.out.println("메모리를 추가하는 것이 좋습니다.");
        }
        System.out.println("======================================");
    }

    public static void main(String[] args) {
        //Computer2클래스 객체화 
        Computer2 com1 = new Computer2();
        Computer2 com2 = new Computer2();

        //PC정보 설정
        com1.setOs("Windows11");
        com1.setMemory(32);
        com2.setOs("Windows11");
        com2.setMemory(16);

        // 인수에 클래스형 변수(객체)를 넘기는 메소드 호출 
        System.out.println("======================================");
        checkMemory(com1);
        checkMemory(com2);
    }
}

 

 

참조형 반환타입(리턴 값)

매개변수뿐만 아니라 반환타입도 참조형이 될 수 있다.

반환하는 값의 타입이 참조형인 것.

 

 

클래스형 배열 (객체 배열)

객체를 배열로 다루는 것.

객체 배열은 참조변수들을 하나로 묶은 참조변수 배열이다.

 

클래스명[] 배열명;
배열명 = new 클래스명[요소수];

// 또는 
클래스명[] 배열명 = new 클래스명[요소수];
객체 배열을 생성하는 것은 그저 객체를 다루기 위한 참조변수들이 만들어진 것이고 기본값인 null이 자동으로 초기화 된다. 객체 배열을 생성하면 객체 배열의 각 요소에 객체를 생성하여 저장하는 것을 잊지 말자!

 

 

// 배열의 초기화 블럭 사용

클래스명[] 배열명 = {요소(), 요소(), 요소()}
Computer[] coms = new Computer[3]; // 참조변수 배열(객체 배열)을 생성

// 객체를 생성해서 배열의 각 요소에 저장
coms[0] = new Computer(); 
coms[1] = new Computer();
coms[2] = new Computer();
다뤄야할 객체의 수가 많을 때는 for문을 사용한다.
Computer[] coms = new Computer[100];

for (int i = 0; i<Computer.lenght; i++){
	coms[i] = new Computer();
    }​

 

 

 

Array List 클래스

요소 수가 정해지지 않은 배열

   - Array List는 List인터페이스를 구현한다.

   - 데이터의 저장순서가 유지됨

   - 중복을 허용함

   - Object 배열을 이용해서 데이터를 순차적으로 저장

   - 가변적 배열 (더이상 저장할 공간이 없으면 데이터량에 맞춰 배열의 사이즈가 자동으로 바뀜)

   - 클래스 라이브러리 중에서 가장 많이 사용하는 컬렉션 클래스

 

 

[ArrayList클래스 사용방법]

  1. ArrayList 클래스를 이용하고 싶은 클래스로 임포트 한다. 
import java.util.*; // java.util패키지 모두 불러오기도 가능

import java.util.ArrayList; // 해당 클래스 임포트
  1. 취급하고 싶은 데이터타입을 선택해 ArrayList클래스의 인스턴스화를 한다.
  2. ArrayList 배열에 데이터 추가/변경/삭제/꺼내기 등을 실시할 때 전용 메소드를 이용한다.

 

 

 

ArrayList 배열 선언

기본 자료형으로 정의할 수 없음 → 기본 자료형 래퍼클래스 이용

ArrayList <취급자료형> 객체변수명 = new ArrayList<취급자료형>(초기크기값);
ArrayList<Integer> intList = new ArrayList<Integer>(); //정수형을 취급하는 가변길이 배열
ArrayList<String> strList = new ArrayList<String>(); //문자열형을 처리하는 가변길이 배열
ArrayList<Computer> comList = new ArrayList<Computer>(); //Computer형을 취급하는 가변길이 배열

 

 

 

 

.add();

ArrayList의 마지막에 데이터(객체) 추가. (배열에 데이터 저장)

객체변수명.add(데이터); // ArrayList의 마지막에 객체 추가
객체변수명.add(인덱스, 객체(데이터); // 지정된 인덱스 위치에 객체 저장

 

 

 

.get();

지정된 인덱스 위치에 저장된 객체(데이터)를 반환.

객체변수명.get(인덱스);

 

 

[add&get 메소드를 사용한 예제]

package chap18;

import java.util.ArrayList;

public class UseArrayList2 {
    public static void main(String[] args) {
        //문자열을 처리하는 ArrayList배열
        ArrayList<String> strList = new ArrayList<String>();

        //1번째 문자열 추가 및 표시
        strList.add("Good morning");
        System.out.println("1번째 저장 데이터는 " + strList.get(0) + "입니다.");

        //2번째 문자열 추가 및 표시
        strList.add("Hello");
        System.out.println("2번째 저장 데이터는 " + strList.get(1) + "입니다.");

        //3번째 문자열 추가 및 표시
        strList.add("Bye");
        System.out.println("3번째 저장 데이터는 " + strList.get(2) + "입니다.");
    }
}

 

 

 

.size();

ArrayList에 저장된 객체의 개수를 반환.

객체변수명.size();
package chap18;

import java.util.ArrayList;

public class UseArrayList3 {

    public static void main(String[] args) {

        ArrayList<String> strList = new ArrayList<String>();

        strList.add("Good morning");
        trList.add("Hello");
         strList.add("Bye");
                        
        System.out.println("1번째 저장 데이터는 " + strList.get(0) + "입니다.");
        System.out.println("2번째 저장 데이터는 " + strList.get(1) + "입니다.");
        System.out.println("3번째 저장 데이터는 " + strList.get(2) + "입니다.");

        //ArrayList배열의 저장 데이터수 표시
        System.out.println("저장 데이터 수는 " + strList.size() + "입니다.");
    }
}

 

 

 

ArrayList에서의 for문

package chap18;

import java.util.ArrayList;

public class UseArrayList4 {
    public static void main(String[] args) {
        // 문자열을 처리하는 ArrayList배열 
        ArrayList<String> strList = new ArrayList<String>();

        //문자열 추가
        strList.add("Good morning");
        strList.add("Hello");
        strList.add("Bye");

        // 반복처리를 이용하여 전건 표시
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+" 2번째 저장 데이터는 " + strList.get(i) + "입니다.");
        }
    }
}
* 조건식에서 .size() 사용
* get()으로 for문으로 반복한 i 값 불러오기

 

 

 

확장된 for문

선언한 변수에 배열이나 컬렉션의 값이 차례로 대입되어 반복.

배열의 0번째 인덱스부터 끝까지 반복처리 된다.

for(변수의 타입 요소 값을 저장할 변수명:배열명 또는 컬렉션명)
{    
    반복할 실행문
}
ArrayList<String> strList = new ArrayList<String>();
・・・
//확장된 for문을 사용하여 저장된 데이터를 순서대로 참조
for(String strData : strList){
  System.out.println("저장데이터는 「" + strData + "입니다.");
}

 

 

 

.set();

객체(데이터)를 지정된 인덱스 위치에 저장한다.

이미 저장되어 있는 데이터를 변경.

객체변수명.set(인덱스, 데이터);
package chap18;

import java.util.ArrayList;

public class UseArrayList5 {
    public static void main(String[] args) {

        ArrayList<String> strList = new ArrayList<String>();

        // 문자열 추가
        strList.add("Good morning");
        strList.add("Hello");
        strList.add("Bye");

        // 반복처리를 이용하여 전건 표시
        System.out.println("* 변경 전 데이터 목록");
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+"번쨰 저장 데이터는 " + strList.get(i) + "입니다.");
        }

        // ★3번째 데이터 변경
        strList.set(2, "Good Bye!");

        System.out.println("\n* 변경후 데이터 목록");
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+"번째 저장데이터는 " + strList.get(i) + "입니다.");
        }
    }
}

 

 

 

 

.remove();

지정한 객체를 제거한다. 

객체변수명.remove(인덱스);
package chap18;

import java.util.ArrayList;

public class UseArrayList6 {

    public static void main(String[] args) {

        ArrayList<String> strList = new ArrayList<String>();

        //문자열 추가
        strList.add("Good morning");
        strList.add("Hello");
        strList.add("Bye");

        System.out.println("* 변경 전 데이터 목록");
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+"번째 추가 데이터는 " + strList.get(i) + "입니다.");
        }
        //3번째 데이터 변경
        strList.set(2, "Good Bye!");
        //2번째 데이터 삭제 
        strList.remove(1); //★데이터 삭제

        System.out.println("\n* 변경 후 데이터 목록");
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+"번째 추가 데이터는 " + strList.get(i) + "입니다.");
        }
    }
}

 

 

 

.indexOf();

지정된 객체가 저장된 위치를 찾아 반환.

객체변수명.indexOf(검색할 데이터);
package chap18;

import java.util.ArrayList;

public class UseArrayList7 {

    public static void main(String[] args) {
        //검색결과의 인덱스 저장변수
        int index;

        // 문자열을 처리하는 ArrayList배열 
        ArrayList<String> strList = new ArrayList<String>();

        //문자열 추가 
        strList.add("Good morning");
        strList.add("Hello");
        strList.add("Bye");
        
        System.out.println("* 변경 전 데이터 목록 ");
        for(int i=0; i<strList.size(); i++){
            System.out.println((i+1)+"번째 저장 데이터는 " + strList.get(i) + "입니다.");
        }

        //ArrayList배열 저장 데이터에서 검색
        System.out.println("======================================");
        index = strList.indexOf("Hello");

        //검색결과 확인 
        if(index != -1){
            System.out.println("Hello는 요소 번호 " + index + "에 저장됩니다. ");
        }else{
            System.out.println("Hello을 찾을 수 없습니다.");
        }
        //3번째 데이터 변경
        strList.set(2, "Good Bye!");
        //2번째 데이터 삭제
        strList.remove(1);

        System.out.println("\n* 변경 후 데이터 목록");
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+"번째 저장 데이터는 " + strList.get(i) + "입니다.");
        }

        //★ArrayList배열 저장 데이터에서 검색
        System.out.println("======================================");
        index = strList.indexOf("Hello");

        // 검색결과 확인 
        if(index != -1){
            System.out.println("Hello는 요소번호 " + index + "에 저장됩니다. ");
        }else{
            System.out.println("Hello를 찾을 수 없습니다.");
        }
    }
}
검색한 객체(데이터)가 발견 되었을 경우 인덱스 위치가 반환되고,
발견되지 않은 경우에는 -1 값이 된다.

 

 

 

.clear();

ArrayList를 완전히 비움. (삭제)

객체변수명.clear();

 

.isEmpty()

ArrayList가 비어있는지 확인.

객체 변수명.isEmpty();

 

 

[clear하고 isEmpty로 완전히 비어있는지 확인하는 예제]

package chap18;

import java.util.ArrayList;

public class UseArrayList8 {
    public static void main(String[] args) {
        ArrayList<String> strList = new ArrayList<String>();

        //문자열 추가 
        strList.add("Good morning");
        strList.add("Hello");
        strList.add("Bye");

        //반복처리를 이용하여 전건 표시
        System.out.println("* 지우기 전의 데이터 일람 ");
        for(int i=0; i<strList.size(); i++ ){
            System.out.println((i+1)+"번째 저장 데이터는 " + strList.get(i) + "입니다.");
        }

        //ArrayList배열 저장된 데이터 삭제
        strList.clear();

        System.out.println("\n* 지우기 후 데이터 목록 ");
        //ArrayList배열 저장 데이터 수 확인 
        if(strList.isEmpty()){
            System.out.println("데이터 1개 없음 ");
        }else{
            for(int i=0; i<strList.size(); i++ ){
                System.out.println((i+1)+"번째 저장 데이터는 " + strList.get(i) + "입니다.");
            }
        }
    }
}

 

 

 

ArratList배열을 인수로 하는 메소드

package chap18;

import java.util.ArrayList;

public class UseArrayList9 {
  /*
  * 인수에 문자열을 취급하는 ArrayList배열을 받아, 그 배열의 모든 데이터를 표시함 
  */
    public static void showArrayListData(ArrayList<String> tmpStrList){
        for(int i=0; i<tmpStrList.size(); i++ ){
            System.out.println((i+1)+"번째 저장 데이터는 " + tmpStrList.get(i) + "입니다.");
        }
    }

    public static void main(String[] args) {
        ArrayList<String> strList = new ArrayList<String>();

        //문자열 추가 
        strList.add("Good morning");
        strList.add("Hello");
        strList.add("Bye");

        //직접 만든 메소드를 이용하여 전건 표시 
        System.out.println("* 지우기 전의 데이터 목록");
        showArrayListData(strList);

        //ArrayList배열 초기화 
        strList.clear();

        System.out.println("\n* 지우기 후 데이터 목록 ");
        //ArrayList배열 데이터 저장 검사 
        if(strList.isEmpty()){
            System.out.println("데이터 1개 없음 ");
        }else{
            showArrayListData(strList);
        }
    }
}

 

 

 

 

연습문제

더보기

18.8. 연습문제

<질문1> 다음의 설문 ①~⑤에 대해 ○인가×로 대답하십시오.

① Java에는 다양한 기능을 가진 클래스가 많이 제공되고 있다. O
② 클래스는 메소드의 인수나 반환값의 형태로서 정의할 수 없다. X
③ 클래스형의 변수는 메소드의 인수나 반환값에 이용할 수 있다. O
④ 클래스형 변수끼리의 대입은 별개의 오브젝트로서 카피된다. X (위치를 가져오는 것)
⑤ 클래스형의 배열은 가변 길이의 배열이 된다. X

 

<질문2> 다음의 설문 ①~⑤에 사용하는 String 클래스의 메소드를 선택지 후보로부터 선택해 대답해 주세요.
옵션
equals substring length charAt split

① 문자열로부터 임의의 1문자를 취득한다. chatAt
② 문자열을 지정한 키워드로 분할하여 취득한다. split
③ 문자열형끼리의 비교를 실시한다. equals
④ 문자열로부터 임의의 길이로 문자열을 분할하여 취득한다. substring
⑤ 문자열의 길이를 얻는다. length

 

<질문3> 아래에 나타내는 소스 코드 Practice1801.java를 실행했을 경우, 실행 결과의 공백 ①~⑧에 들어가는 책의 타이틀과 가격을 각각 대답해 주세요.

① 소스폴더: javabasic/src
② 패키지: chap18exercise
③ 이름: Books

① 소스 폴더: myproj_basic/src
② 패키지: kr.co.f1.basic.ch09exercise
③ 이름: Practice1801

Books.java

package chap18excercise;

public class Books {
    private String title; //제목
    private int price; //가격

    // 생성자
    public Books(String title,int price){
        this.title = title;
        this.price = price;
    }

    //인수를 각 필드변수로 설정하는 메소드
    public void setBookInfo(String title,int price){
        this.title = title;
        this.price = price;
    }

    // 도서정보를 화면에 표시하는 방법
    public void showBookInfo(){
        System.out.println("이 책의 제목: " + this.title );
        System.out.println("이 책의 가격: " + this.price + "원");
        System.out.println("=================================================");
    }
}

Practice1801.java

package chap18excercise;

public class Practice1801 {
    public static void main(String[] args) {
        System.out.println("=================================================");
        Books book1 = new Books("Java 입문", 29800);
        book1.showBookInfo(); //①과 ②의 결과 표시 - Java 입문, 29800

        book1 = new Books("Java 알고리즘 ",15000);
        book1.showBookInfo(); //③과 ④의 결과 표시 - Java 알고리즘, 15000

        Books book2 = book1;
        book2.showBookInfo(); //⑤과 ⑥의 결과 표시 - Java 알고리즘, 15000
        book2.setBookInfo("Java Spring 프로그래밍 ", 32000);

        book1.showBookInfo(); //⑦과 ⑧의 결과 표시 - Java Spring 프로그래밍, 32000

    }
}

 

<질문4> 이하에 나타내는 Practice1802.java의 소스 코드를, Books 오브젝트 배열을 이용한 내용의 Practice1803.java를 작성해 주세요.

작성팁

① Books 오브젝트 배열을 요소수 「5」로 정의합니다.
② 반복문을 이용하여 Books 객체 배열에 각 요소에 객체를 생성하여 대입합니다.
③ 반복문을 이용하여 Books 객체 배열의 각 요소에서 showBookInfo 메서드를 호출합니다.

 

① 소스 폴더:javabasic/src
② 패키지: chap18exercise
③ 이름: Practice1802

1. 

Books[] bookArray = new Books[5];

2. 

for(int i=0; i<bookArray.length;i++) {
bookArray[i] = new Books(title[i], price[i]);
}

 3.

for(int i = 0; i< bookArray.length;i++{
bookArray[i].showBookInfo();
}

 

<질문5> Practice1804.java 소스 코드를 아래의 변경 사양에 따라 Practice1805.java를 작성하십시오.

변경 사양
① main 메소드의 점수 저장용 배열을, 통상의 int 배열로부터 정수치를 취급하는 ArrayList 배열로 변경한다.
② ①의 변경에 맞추어 main 메소드 처리 내부를 ArrayList 배열을 이용한 방법으로 변경한다.
③ showSumScore 메서드의 인수 형식을 ArrayList로 변경합니다.
④ ③의 변경에 맞게 showSumScore 메소드 처리 내부를 ArrayList 배열을 이용한 방법으로 변경한다.

① 소스 폴더: javabasic/src
② 패키지: chap18exercise
③ 이름: Practice1804
package chap18excercise;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Practice1804 {
  /*
  * 점수가 저장된 배열을 인수로 받아 그 점수를 모두 표시하고 합계를 계산하여 표시함
  */
    public static void showSumScore(int[] score){
        int sum=0; //총점 저장용 변수
        for(int i=0;i<score.length;i++){
            System.out.println((i+1)+"의 점수는 " + score[i] + "입니다");

            sum += score[i];
        }
        System.out.println("총합계는 「" + sum + "입니다.");
    }

    public static void main(String[] args) {
        int count = 0; //카운트 저장변수
        int[] score = new int[5]; //점수 저장용 배열 

        //Scanner클래스 객체 생성
        Scanner sin = new Scanner(System.in);

        //반복처리로 5명분의 점수 입력 실시
        while(true){
            try{
                // 키보드 점수 입력 
                System.out.print("점수 입력 = ");
                score[count] = sin.nextInt();

                if(count==4){
                    //5회 입력 반복 
                    break;
                }
                //카운트 증가 
                count++;

            }catch(InputMismatchException e){
                System.out.println("양수값 입력하세요");
                // 입력버퍼 지우기 
                sin.nextLine();
            }
        }

        System.out.println("=========================");
        //모든 입력점과 총점을 표시하는 메소드 호출 
        showSumScore(score);
    }
}
package jokun.chap18;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Practice1804 {
    /*
     * 점수가 저장된 배열을 인수로 받아 그 점수를 모두 표시하고 합계를 계산하여 표시함
     */
    public static void showSumScore(ArrayList<Integer> score){
        int sum=0; //총점 저장용 변수
        for(int i = 0; i < score.size(); i++){
            System.out.println((i+1)+"의 점수는 " + score.get(i) + "입니다");

            sum += score.get(i);
        }
        System.out.println("총합계는 「" + sum + "입니다.");
    }

    public static void main(String[] args) {

        int count = 0; //카운트 저장변수

      //  int[] score = new int[5]; //점수 저장용 배열
        ArrayList score = new ArrayList(5);

        //Scanner클래스 객체 생성
        Scanner sin = new Scanner(System.in);

        //반복처리로 5명분의 점수 입력 실시
        while(true){
            try{
                // 키보드 점수 입력
                System.out.print("점수 입력 = ");
                score.add(count, sin.nextInt());

                if(count==4){
                    //5회 입력 반복
                    break;
                }
                //카운트 증가
                count++;

            }catch(InputMismatchException e){
                System.out.println("양수값 입력하세요");
                // 입력버퍼 지우기
                sin.nextLine();
            }
        }

        System.out.println("=========================");
        //모든 입력점과 총점을 표시하는 메소드 호출
        showSumScore(score);
    }
}
복사했습니다!