문제
5명의 이름과 키를 입력받아 키가 가장 작은 사람의 이름과 키를 출력하는 프로그램을 작성하시오. 이름은 20자 이하이다.
입력 예
Park 175
Lee 180
Choo 185
Son 193
Kim 188
출력 예
Park 175
코드
import java.util.*;
class School {
String name;
int height;
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
School s[] = new School[5];
for(int i=0; i<s.length; i++) {
s[i] = new School();
}
int min = 0; // 가장 작은 학생의 키
String minName = ""; // 키가 가장 작은 학생의 이름
// 각 학생의 이름, 키 입력받기
for(int i=0; i<5; i++) {
s[i].name = sc.next();
s[i].height = sc.nextInt();
min = s[0].height;
minName = s[0].name;
}
// 키 가장 작은 학생의 키와 이름 구하기
for(int j=0; j<5; j++) {
if(s[j].height < min) {
min = s[j].height;
minName = s[j].name;
}
}
System.out.printf("%s %d", minName , min);
}
}
※ 가장 키가 작은 학생의 키를 나타내는 min을 구하기 위해 min의 초기값과 다른 학생들의 키를 같은 for문 안에서 비교하게 되면 min의 값이 계속 s[0].height 가 적용된다.
따라서, 각 학생의 키와 이름을 입력 받는 for문 안에서 min과 minName의 초기값을 설정해주고, 그 값과 다른 학생의 키를 비교하는 for문은 코드를 따로 구현해야 한다.
※ 자바에는 구조체가 없어 클래스로 구조체를 사용하는데,
class School {
String name;
int height;
}
이를 배열로 사용하려면,
School s[] = new School[5];
이처럼 코드를 짜주는데, 이렇게만 코드를 구현하면 실행했을 때 NullPointer 에러가 발생하게 된다.
이 경우엔, 아래처럼 배열 개수만큼 일일이 생성해주면 에러가 해결된다.
School s[] = new School[5];
for(int i=0; i<s.length; i++) {
s[i] = new School();
}
'Algorithm > JUNGOL' 카테고리의 다른 글
[정올] 196 : 구조체 - 형성평가2 (0) | 2022.01.10 |
---|---|
[정올] 618 : 구조체 - 자가진단6 (*) (0) | 2022.01.10 |
[정올] 616 : 구조체 - 자가진단4 (0) | 2022.01.09 |
[정올] 615 : 구조체 - 자가진단3 (0) | 2022.01.09 |
[정올] 614 : 구조체 - 자가진단2 (0) | 2022.01.09 |