java 23

산야(Sanya)·2024년 1월 29일

java 족보

목록 보기
25/28

1. 아래를 프로그래밍 하시오.

  • 원객체 생성

  • ArrayList 에 차례대로 반지름이 1인 원 부터 10인원을 입력.

  • 차례대로 각각의 원 넓이 출력

  • 10개의 원넓이 합산 하여 출력.

import java.util.ArrayList;

class Circle {
    double radius;

    Circle(double radius) {
        this.radius = radius;
    }

    double getArea() {
        return Math.PI * radius * radius;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Circle> circles = new ArrayList<>();
        double totalArea = 0;

        for (int i = 1; i <= 10; i++) {
            Circle circle = new Circle(i);
            circles.add(circle);
            double area = circle.getArea();
            System.out.println("반지름이 " + i + "인 원의 넓이: " + area);
            totalArea += area;
        }

        System.out.println("10개의 원의 넓이 합계: " + totalArea);
    }
}

2. ArrayList 와 LinkedList 의 차이(장단점)는?

  • ArrayList는 내부적으로 데이터를 배열로 저장하므로 인덱스를 통한 데이터 접근이 빠르지만, 데이터의 추가 및 삭제 시에는 배열의 크기를 조정해야 하므로 비용이 발생합니다.

  • LinkedList는 데이터를 노드로 저장하고 각 노드가 이전 및 다음 노드를 참조하므로 데이터의 추가 및 삭제가 빠르지만, 인덱스를 통한 데이터 접근 시에는 처음 또는 끝에서부터 노드를 순회해야 하므로 비용이 발생합니다.

3. 5명의 별명(String)을 입력 받아 ArrayList에 저장하고 이들 중 별명의 길이가

제일 긴 별명을 출력하시오. (단, 각 별명의 길이는 모두 다르게 입력한다.)

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> nicknames = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            System.out.print((i + 1) + "번째 별명을 입력하세요: ");
            nicknames.add(scanner.nextLine());
        }

        String longestNickname = nicknames.get(0);
        for (String nickname : nicknames) {
            if (nickname.length() > longestNickname.length()) {
                longestNickname = nickname;
            }
        }

        System.out.println("가장 긴 별명: " + longestNickname);
    }
}

4.Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력받아 List에 저장하고 List를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

정수(-1이 입력될 때까지)>> 10 6 22 6 88 77 -1
가장 큰 수는 88

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Integer> numbers = new ArrayList<>();

        while (true) {
            System.out.print("정수(-1이 입력될 때까지)를 입력하세요: ");
            int number = scanner.nextInt();
            if (number == -1) {
                break;
            }
            numbers.add(number);
        }

        int maxNumber = numbers.get(0);
        for (int number : numbers) {
            if (number > maxNumber) {
                maxNumber = number;
            }
        }

        System.out.println("가장 큰 수는 " + maxNumber);
    }
}

5.Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.

6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> A C A B F D
2.3333333333333335

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> grades = new ArrayList<>();
        HashMap<String, Double> gradeToScore = new HashMap<>();
        gradeToScore.put("A", 4.0);
        gradeToScore.put("B", 3.0);
        gradeToScore.put("C", 2.0);
        gradeToScore.put("D", 1.0);
        gradeToScore.put("F", 0.0);

        for (int i = 0; i < 6; i++) {
            System.out.print((i + 1) + "번째 학점을 입력하세요: ");
            grades.add(scanner.nextLine());
        }

        double totalScore = 0;
        for (String grade : grades) {
            totalScore += gradeToScore.get(grade);
        }

        double averageScore = totalScore / grades.size();
        System.out.println("평균 점수: " + averageScore);
    }
}

6.5명의 사람 이름을 입력 받아서 ArrayList에 저장한 후에 이들 중 '김'씨 성을 가진 사람을 모두 출력하시오.

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> names = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            System.out.print((i + 1) + "번째 이름을 입력하세요: ");
            names.add(scanner.nextLine());
        }

        System.out.println("'김'씨 성을 가진 사람:");
        for (String name : names) {
            if (name.startsWith("김")) {
                System.out.println(name);
            }
        }
    }
}

7. 아래의 소스코드를 설명하시오.

    List<String> list = Arrays.asList("Toy", "Box", "Robot", "Box");
        list = new ArrayList<>(list);
       
        ListIterator<String> litr = list.listIterator();
        String str; 

        // 왼쪽에서 오른쪽으로 
        while(litr.hasNext()) {
            str = litr.next();
            System.out.print(str + '\t');

            if(str.equals("Toy"))
                litr.add("Toy2");
        }
        System.out.println();
        
        // 오른쪽에서 왼쪽으로

        while(litr.hasPrevious()) {
            str = litr.previous();
            System.out.print(str + '\t');

            if(str.equals("Robot"))
                litr.add("Robot2");
        }
        System.out.println();

        // 다시 왼쪽에서 오른쪽으로
        for(Iterator<String> itr = list.iterator(); itr.hasNext(); )
            System.out.print(itr.next() + '\t');
        System.out.println();

이 코드는 List와 ListIterator를 사용하여 리스트를 순회하고 수정하는 방법을 보여줍니다.

  • 먼저, “Toy”, “Box”, “Robot”, "Box"라는 문자열을 포함하는 List를 생성합니다.
  • 그런 다음 ListIterator를 사용하여 리스트를 왼쪽에서 오른쪽으로 순회합니다. 이 과정에서 "Toy"라는 문자열을 발견하면 "Toy2"라는 문자열을 리스트에 추가합니다.
  • 이후에는 ListIterator를 사용하여 리스트를 오른쪽에서 왼쪽으로 순회합니다. 이 과정에서 "Robot"이라는 문자열을 발견하면 "Robot2"라는 문자열을 리스트에 추가합니다.
  • 마지막으로, Iterator를 사용하여 리스트를 다시 왼쪽에서 오른쪽으로 순회하고, 모든 요소를 출력합니다.

8.하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.

(1) 학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList 컬렉션에 저장한 후에, ArrayList의 모든 학생(4명) 정보를 출력하고 학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.

학생 이름, 학과, 학번, 학점평균 입력하세요.

황기태, 모바일, 1, 4.1

이재문, 안드로이드, 2, 3.9

김남윤, 웹공학, 3, 3.5

최찬미, 빅데이터, 4, 4.25


이름: 황기태

학과: 모바일

학번: 1

학점평균: 4.1


이름: 이재문

학과: 안드로이드

학번: 2

학점평균: 3.9


이름: 김남윤

학과: 웹공학

학번: 3

학점평균: 3.5


이름: 최찬미

학과: 빅데이터

학번: 4

학점평균: 4.25


학생 이름 >> 최찬미

최찬미, 빅데이터, 4, 4.25

학생 이름 >> 이재문

이재문, 안드로이드, 2, 3.9

학생 이름 >> 그만

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

class Student {
    String name;
    String department;
    int id;
    double gpa;

    Student(String name, String department, int id, double gpa) {
        this.name = name;
        this.department = department;
        this.id = id;
        this.gpa = gpa;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Student> students = new ArrayList<>();

        for (int i = 0; i < 4; i++) {
            System.out.print("학생 이름, 학과, 학번, 학점평균 입력하세요: ");
            String name = scanner.next();
            String department = scanner.next();
            int id = scanner.nextInt();
            double gpa = scanner.nextDouble();

            students.add(new Student(name, department, id, gpa));
        }

        for (Student student : students) {
            System.out.println("----------------------------------");
            System.out.println("이름: " + student.name);
            System.out.println("학과: " + student.department);
            System.out.println("학번: " + student.id);
            System.out.println("학점평균: " + student.gpa);
        }

        while (true) {
            System.out.print("학생 이름 >> ");
            String name = scanner.next();

            if (name.equals("그만")) {
                break;
            }

            for (Student student : students) {
                if (student.name.equals(name)) {
                    System.out.println(student.name + ", " + student.department + ", " + student.id + ", " + student.gpa);
                    break;
                }
            }
        }
    }
}
profile
개발일지

0개의 댓글