알고리즘

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