// 5명의 사람 이름을 입력 받아서 ArrayList에 저장한 후에 이들 중 '김'씨 성을 가진 사람을 모두 출력하시오.
// + 김씨 성을 가진 사람이 몇 명인지 출력하시오.
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayList_Ex {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 스캐너 불러오기
ArrayList<String> names = new ArrayList(); // ArrayList 생성
int index = 0; // 몇 명인지 숫자 세기
for(int i = 0 ; i <= 4 ; i++) { // 스캐너로 이름 5개 입력 받기
System.out.println("이름을 입력해 주세요");
names.add(sc.nextLine());
}
System.out.println("성이 '김'인 분의 이름을 모두 출력합니다.");
for(int i = 0 ; i <= 4 ; i++) {
String name = names.get(i); // 배열의 값(이름)을 변수에 저장
if (name.startsWith("김")) { // 만약 "김"으로 시작한다면,
index++; // 인덱스는 +1
System.out.printf("[%s]\t",names.get(i)); // 이름이 출력됨
}
}
System.out.println();
System.out.println("김씨 성을 가진 분은 모두 " + index + " 명 입니다.");
// 몇 명인지도 인덱스를 통해 출력됨
}
}
import java.util.ArrayList;
import java.util.Scanner;
// 5명의 별명을 입력 받아 ArrayList에 저장하고 이들 중 별명의 길이가 제일 긴 별명을 출력하시오.
// (단, 각 별명의 길이는 모두 다르게 입력한다.)
// 위 문제에서 별명의 길이가 같은 것을 입력할 수 있는 경우를 처리하시오.
public class ArrayList_Ex02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 스캐너
ArrayList<String > nicknames = new ArrayList(); // ArrayList 생성
int[] lengthArr = new int[5]; // 별명 문자열 길이를 저장할 배열
int max = lengthArr[0]; // 최대값을 저장할 인스턴스
for (int i = 0 ; i <= 4 ; i++) { // 5개의 별명을 입력 받는다
System.out.println("별명을 입력 해 주세요!");
nicknames.add(sc.nextLine());
}
for (int i = 0 ; i <= 4 ; i++) {
// ArrayList에 저장된 각 별명들의 길이를 lengthArr에 저장한다
lengthArr[i] = nicknames.get(i).length();
if (max < lengthArr[i]) { // 최대값을 찾아 max에 저장한다
max = lengthArr[i];
}
}
for (int i = 0 ; i <= 4 ; i++) { // i번째 배열의 길이가 max와 같다면 출력한다
if (max == nicknames.get(i).length()) {
System.out.println("가장 길이가 긴 별명은 > " + nicknames.get(i));
}
}
}
}
뭔가 더 for문을 적게 쓰고도 할 수 있는 방법이 있을 것 같은데 잘 모르겠다. ArrayList를 배워서 어딘가 써먹었다는 데에 의의를 둔다.
두 번째 문제에서 중복값을 처리할 수 있는 방안을 만들라고 했는데, 어차피 중복값이 나와도 가장 길이가 긴 별명이 복수일 경우, 모두 출력 되기 때문에 저 코드로 괜찮지 않나 싶었다. (아닌가?)
아, 여전히 for문으로 최대값, 최소값 구하기와 String 함수 종류가 헷갈리기 때문에 내일 다시 정리해 두어야 겠다고 생각했다!