알고리즘
1. 학생 이름, 학번 출력 프로그램
망재이
2023. 2. 5. 11:46
< 학생의 이름과 학번을 입력하면 검색을 해주는 프로그램을 작성 >
- 학생 이름과 학번을 private접근자로 가지는 Student 클래스 설정
//Student 클래스 설정
class Student {
private String name;
private int num;
public Student(String name, int num) { //생성자 초기화
this.name=name;
this.num = num;
}
public String getName() //getter와 setter로 멤버변수에 접근할 수 있도록 설정
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
}
더보기
☆ 참고 ★
멤버변수는 이왕이면 private접근자로 설정하여 함부로 접근하지 못하도록 설정해주는 것이 좋다.
setter를 이용해서 이름, 학번을 입력받고, getter를 이용해서 이름과 학번을 return해주도록 만들어주었다.
- ArrayList를 만들어서 차곡차곡 학생들의 정보를 저장
Student st1 = new Student("사오정", 49204); //Student의 인스턴스 객체 생성
Student st2 = new Student("손오공", 49384);
Student st3 = new Student("저팔계", 38204);
Student st3 = new Student("저팔계", 38464); //중복이름에 대한 결과를 확인하기 위해 생성
ArrayList<Student> students = new ArrayList<Student>(); //ArrayList생성
students.add(st1);
students.add(st2);
students.add(st3);
students.add(st4);
for(Student k:students) { //for each문
System.out.println(k.getName()+" : "+k.getNum());
}
더보기
☆ 참고 ★
일단 위 프로그램은 사용자가 정보를 저장할 수 있도록 구현해 놓은 것은 아니다.
그리고 ArrayList만을 사용하였으므로 중복 저장이 가능하다.(아직 중복에 대한 부분까지 고려하지 않았음)
for each문을 통해서 students에 들어있는 getName과 getNum에 값들이 제대로 저장되었는지 확인하기 위해 코드 설정
- 계속 검색할지, 프로그램을 종료할지를 y와 n으로 받아주도록 설정
Scanner in = new Scanner(System.in);
System.out.println("계속 검색을 하고싶으시면 y, 종료하고싶으시면 n을 눌려주세요.");
String input = in.next();
- 입력하는 값에 따라 계속 반복을 해줘야 하므로 while문 사용
Scanner in = new Scanner(System.in);
while(true) {
System.out.println("계속 검색을 하고싶으시면 y, 종료하고싶으시면 n을 눌려주세요.");
String input = in.next(); }
- Case1. y를 입력하는 경우 -> 검색하고 싶은 이름 받기
- Case2. n을 입력하는 경우 -> 프로그램 종료
- Case3. 그밖의 값을 입력한는 경우 ->" 잘못된 값을 입력하였습니다." 출력 후 다시 입력 받기
//Case1
if(input.trim().equalsIgnoreCase("y")) { //대소문자 상관없이 y를 받고 주변에 있을 공백을 제거하는 메소드 사용
System.out.println("검색을 시작합니다. 학생이름 : ");
String name = in.next(); //검색하고자하는 이름 입력 받기
for(Student k:students) { //students List안에 일치하는 이름이 있는지 하나하나 확인을 해봐야하므로 for each문 사용
if(k.getName().equals(name)) { //일치하는 이름이 있으면 이름, 학번 출력
System.out.println(k.getName()+" : "+k.getNum());
}
}
//Case2
}else if(input.trim().equalsIgnoreCase("n")) { //프로그램이 종료되면서 while문에서 빠져나올 수 있도록 break 사용
System.out.println("프로그램을 종료합니다.");
break;
//Case3
}else { //잘못된 값을 입력하면 프로그램을 종료하는 것이 아니라 다시 값을 받아줘야 하므로 break문 사용하지 않았음
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
}
- 이름을 검색했을 때, 해당 이름을 가진 학생이 존재하는지 하지 않는지를 확인해주는 부분만 남았음
- 검색을 했을 때 학생의 이름이 존재하는지 하지 않는지를 알려주는 flag 변수 설정
- for each문을 이용해서 flag를 활용해 하나하나 정보를 출력하도록 설정
boolean flag = false; // 학생의 존재여부 (false일 때는 해당 학생이 없다는 뜻)
if(input.trim().equalsIgnoreCase("y")) {
System.out.println("검색을 시작합니다. 학생이름 : ");
String name = in.next();
for(Student k:students) {
if(k.getName().equals(name)) {
System.out.println(k.getName()+" : "+k.getNum());
flag = true; //일치하는 이름이 있으므로 flag를 true로 바꿔줌
}
}
if(!flag) { //현재 flag의 값이 false일 경우 !flag를 해줘야 true로 바뀌면서 아래 실행문이 출력됨
System.out.println("해당하는 학생이 없습니다.");
}
}
더보기
☆ 참고 ★
해당하는 학생의 이름을 출력하고나서 flag를 true로 바꿔주는 이유
현재 for-each문 안에 if문이 있으므로 if문을 실행할 수 있는지 확인을 다 한 후 아래 if(!flag)문으로 내려간다
일치하는 학생이 없을 경우 flag는 여전히 false인 상태에서 !flag를 통해 "해당하는 학생이 없습니다."를 출력해주지만,
먼저 일치하는 학생이 있다고 가정했을 때, 예를 들어 "저팔계"를 입력하면 저팔계 : 학번이 출력되고 여전히 flag는 false이므로
!flag를 통해 "해당하는 학생이 없습니다."란 실행문이 계속 실행된다.
따라서 해당하는 학생을 찾았으면 flag = true라고 바꿔줘야 아래 if(!flag)문이 실행되지 않는다.
< 전체 코드 >
더보기
import java.util.ArrayList;
import java.util.Scanner;
class Student {
private String name;
private int num;
public Student(String name, int num) {
this.name=name;
this.num = num;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
}
public class StrudentNameNo
{
public static void main(String[] args)
{
Student st1 = new Student("사오정", 49204);
Student st2 = new Student("손오공", 49384);
Student st3 = new Student("저팔계", 38204);
Student st4 = new Student("저팔계", 38494);
ArrayList<Student> students = new ArrayList<Student>();
students.add(st1);
students.add(st2);
students.add(st3);
students.add(st4);
for(Student k:students) {
System.out.println(k.getName()+" : "+k.getNum());
}
Scanner in = new Scanner(System.in);
while(true) {
System.out.println("계속 검색을 하고싶으시면 y, 종료하고싶으시면 n을 눌려주세요.");
String input = in.next();
boolean flag = false; // 학생의 존재여부
if(input.trim().equalsIgnoreCase("y")) {
System.out.println("검색을 시작합니다. 학생이름 : ");
String name = in.next();
for(Student k:students) {
if(k.getName().equals(name)) {
System.out.println(k.getName()+" : "+k.getNum());
flag = true;
}
}
if(!flag) {
System.out.println("해당하는 학생이 없습니다.");
}
}else if(input.trim().equalsIgnoreCase("n")) {
System.out.println("프로그램을 종료합니다.");
break;
}else {
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
}
}
}
}
728x90