JAVA

[java]ArrayList (자동배열)로 성적 입력 프로그램 만들기

라텐느 2024. 8. 18. 09:30
반응형

 

20240814수업

배열과 ArrayList의 차이

배열

  • 이름과 type이 같은 변수 모은 것
  • 한번만들어지면 크기가 바뀌지 않는다.
  • ex)인원수가 바뀌는 성적처리를 할때(배포) 매번 업데이트해주어야하는 불편함>>ArrayList 사용
  • 사이즈가 정해진거에 용이

ArrayList

  • 이름과 type이 같은 변수 모은 것
  • 실행할떄 크기가 변경될 수 있다
  • 타입이 다른것이 들어갈 수 있다.
  • 특별한 설정이 없다면 al의 요소는 Object(정수, 문자, 문자열, 실수 등)타입이다.
  • old방식 : java1.5

 

 

ArrayList
ArrayList 변수명=new ArrayList()

 

ArrayList 기본 예시

ArrayList al = new ArrayList();

 

al.add(1);

al.add("민지");

al.add('A');

 

 

int val1=(int) al.get(0); //ArrayList를 사용할때의 단점: 형변환이 필요하다.

System.out.println(val1);

String val2=String.valueOf(al.get(1));

//(String)al.get(1);은 코드가 복잡해질때 오류발생>>Object를 String으로 casting할때 valueOf를 써야함.

System.out.println(val2);

 

System.out.println(al.size()+","+al.get(0));

System.out.println(al.size()+","+al.get(1));

System.out.println(al.size()+","+al.get(2));

 

ArrayList요즘방식-generic

//<T>:T- class type(reference) ~> 참고:[java]정렬하기(Sort), 람다식

//int:primitive type

//ArrayList<int> al2=new ArrayList<int>();>>오류∵)class type이 아니라서 ->Integer

ArrayList<Integer> al2=new ArrayList<Integer>(); //Int값만 저장 가능한 ArrayList

al2.add(100); //0

al2.add(70); //1

al2.add(80);//2

//al2.add("민지"); >> error

System.out.println(al2.get(0));

System.out.println(al2.get(1));

System.out.println(al2.get(2));

 

for (int i = 0; i < al2.size(); i++) {

System.out.println(al2.get(i));

}

 

번호,이름,국어,영어,수학
1,사나,70,80,90
2,모모,0,70,100
3,쯔위,70,90,90
4,정연,80,90,70
5,카리나,100,99,79
6,윈터,50,75,87

ArratList는 표준문법이 아니기 때문에 import java.util.ArrayList가 필요하다.


static ArrayList<Integer>num=new ArrayList<>();

static ArrayList<String>name=new ArrayList<>();

static ArrayList<Integer>kor=new ArrayList<>();

static ArrayList<Integer>eng=new ArrayList<>();

static ArrayList<Integer>mat=new ArrayList<>();

static ArrayList<Integer> tot =new ArrayList<>();

static ArrayList<Double> avg =new ArrayList<>(); //double을 클래스로 만들때는 Double , Boolean, Character

static ArrayList<Character> grade =new ArrayList<>();

최상위클래스에 ArrayList를 작성한다.

public static void main(String[] args) {

intput();

process();

output();

}

메인클래스에서 각각의 클래스들을 호출한다.(input,process,output에서 void로 인해 return된다.)

private static void intput() {

Scanner in = new Scanner(System.in);

System.out.println("번호,이름,국어,영어,수학");

 

for (; ; ) { //무한 루프:조건이 무조건 참이므로

String line=in.nextLine();

if(line.trim().equals("exit")) break; //exit가 나오면 반복문을 중지

 

String[]li=line.trim().split(",");

num.add(Integer.parseInt(li[0].trim()) );

//해석:li[0]을 숫자로 바꾸고(parseInt) 공백을 없앤(trim) 후 num에 넣는다(num.add)

name.add(li[1].trim());

kor.add(Integer.parseInt(li[2].trim()));

eng.add(Integer.parseInt(li[3].trim()));

mat.add(Integer.parseInt(li[4].trim()));

}

}

private static void process() {

// 0 1 2 3 4 5 6 7 8 9 10

char [] g= {'F','F','F','F','F','F','D','C','B','A','A'};

for (int i = 0; i < num.size(); i++) {

tot.add(kor.get(i)+eng.get(i)+mat.get(i));//get:클래스 문법

avg.add(tot.get(i)/3.0);

grade.add(g[(int) (avg.get(i)/10)]);

}

↑grade계산법1

for(int i=0;i<num.size();i++) {

tot.add((kor.get(i)+eng.get(i)+mat.get(i)));

avg.add((double)tot.get(i)/3);

double val = avg.get(i);

switch((int)val/10) {

case 10 : grade.add('A'); break;

case 9 : grade.add('B'); break;

case 8 : grade.add('C'); break;

case 7 : grade.add('D'); break;

case 6 : grade.add('E'); break;

default : grade.add('F');

}

↑grade계산법2

private static void output() {

String title="번호 이름 국어 영어 수학 총점 평균 학점";

System.out.println(title);

for (int j = 0; j < num.size(); j++) {

System.out.printf("%d %s %d %d %d %d %.2f %c\n",

num.get(j), name.get(j), kor.get(j), eng.get(j), mat.get(j), tot.get(j), avg.get(j), grade.get(j));

}

}

결과

exit를 입력하기 전까지 계속 성적을 입력할수 있음

반응형