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를 입력하기 전까지 계속 성적을 입력할수 있음
'JAVA' 카테고리의 다른 글
[java]getter/setter (0) | 2024.08.18 |
---|---|
[java]Constructor, Override (0) | 2024.08.18 |
[java]정규식 (Regular Expression) (0) | 2024.08.17 |
[java] String 함수 총정리 (0) | 2024.08.15 |
[java] 주민등록번호, 사업자 등록번호 유효성 검사 (0) | 2024.08.15 |