Developer/JAVA

JAVA , 예제 : 로또 번호 생성기 , 학생 성적순 출력

단님 2024. 8. 6. 00:20
728x90
로또 번호 생성기
문제 요점 : 한클래스 내에서 만든다.
로또 번호를 정렬하는 메서드를 따로 만들어서 구현할것.
메서드는static 으로 정의 하여 사용.
 정렬 메서드는 6개의 정수가 인자로 받아 정렬한다.

 

즉 , 정렬에 대한 메서드가 배열을 인자로 받아야한다는 의미였다.

	public static void lottoSort(int [] arr) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (arr[i]>arr[j]) {
					int tem = arr[i];
					arr[i] = arr[j];
					arr[j] = tem;
				}
			}
		}
	}
	public static void lottoSortReverse(int [] arr) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (arr[i]<arr[j]) {
					int tem = arr[i];
					arr[i] = arr[j];
					arr[j] = tem;
				}
			}
		}
	}

 

이 메서드를 하나로 합쳐 표현했다.

	public static void lottoSort(int [] arr, String s) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (s=="오름차순" ?arr[i]>arr[j] : arr[i]<arr[j]) {
					int tem = arr[i];
					arr[i] = arr[j];
					arr[j] = tem;
				}
			}
		}
	}

 

로또 번호를 생성하는 메서드

public int[] lottoarr(int arr[]) {
		int lotto[] = arr;
		Random random = new Random();

		for (int i = 0; i < lotto.length; ) {
			boolean bool = true;
			int randomNumber = random.nextInt(45)+1;
			
			for (int j : lotto) {
				bool = randomNumber !=j; //같지 않아야 true , 같으면 false 
				if (randomNumber==j) break; //false 일때 멈추고 다시 진행되야함.
			}
			
			if (bool) { // 전부 같지 않아서 true 가 떨어진다면 실행할 실행문
				lotto[i] = randomNumber ; 
				i++;
			}
	}
		return lotto;
	}

중복값을 bool 이라는 boolean 값으로 체크한후 중복되지 않으면 , i의 값을 증가시켰다.

 

  • 메인 메서드 의 실행
public static void main(String[] args) {
		Ex02_CallByRef_Lotto lotto = new Ex02_CallByRef_Lotto();

		int result[] = lotto.lottoarr(new int [6]);

		System.out.println("=====sort 전====");
		
		for (int i : result) {
			System.out.print(i+" ");
		}
		System.out.println();
		System.out.println("=====sort 후==== lottoSort(result);");
		lottoSort(result);
		for (int i : result) {
			System.out.print(i+" ");
		}
		System.out.println();
		System.out.println("=====sort 후==== lottoSortReverse(result);");
		lottoSortReverse(result);
		for (int i : result) {
			System.out.print(i+" ");
		}
		System.out.println();
		System.out.println("=====sort 후==== lottoSort(result,\"오름차순\");");
		lottoSort(result,"오름차순");
		for (int i : result) {
			System.out.print(i+" ");
		}
		System.out.println();
		System.out.println("=====sort 후==== lottoSort(result,\"내림차순\");");
		lottoSort(result,"내림차순");
		for (int i : result) {
			System.out.print(i+" ");
		}
	}

 


학생 인스턴스 5개를 배열에 담아 성적순으로 출력.
문제 요점 : Student  Class 정의.
인스턴스 5개를 배열로 담음.
성적순으로 출력
멤버 변수(privite) : id , name , 과목 3가지(java , spring , mySQL)
생성자로 초기화 할것.
출력 순서가 성적순

-출력 모양
no : 1....
id :
name :
점수 :
합계 : 
평균 :

 

1. student 클래스를 만들고 변수 정의 , setter , getter , 생성자 만들기

class Student {
    private String id;
    private String name;
    private int java;
    private int spring;
    private int mysql;

    // 기본 생성자
    public Student() {
    }

    // 초기화 생성자
    public Student(String id, String name, int java, int spring, int mysql) {
        this.id = id;
        this.name = name;
        this.java = java;
        this.spring = spring;
        this.mysql = mysql;
    }

    // getter 및 setter 메서드
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getJava() {
        return java;
    }

    public void setJava(int java) {
        this.java = java;
    }

    public int getSpring() {
        return spring;
    }

    public void setSpring(int spring) {
        this.spring = spring;
    }

    public int getMysql() {
        return mysql;
    }

    public void setMysql(int mysql) {
        this.mysql = mysql;
    }

    public double average() {
        int add = java + spring + mysql;
        return add / 3.0;
    }

    // toString 메서드
    @Override
    public String toString() {
        return " [id=" + id + "\n name=" + name +
                "\n 성적 : java=" + java + ", spring=" + spring + ", mysql=" + mysql +
                "\n 합계 : " + (java + spring + mysql) +
                "\n 평균 : " + average() +
                "]";
    }
}

 

조금 길지만 자동으로 생성하고 toString 부분만 내가 원하는 모양으로 조금 변경해 주었다.

 

2. 배열을 정렬할 sort 메서드 만들기

public static void studentSort(Student[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i].average() < arr[j].average()) {
                    Student temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

이 부분에서 중요했던 부분은 배열 타입이 student 배열인 것이다.

그 부분을 조심하며 만들어 주었다.

 

3. 인스턴스 생성과 sort 메서드 까지의 사용

Student st1 = new Student("일번", "단무지", 10, 20, 30);
Student st2 = new Student("이번", "오이", 50, 20, 30);
Student st3 = new Student("삼번", "당근", 50, 55, 56);
Student st4 = new Student("사번", "계란", 32, 12, 50);
Student st5 = new Student("오번", "우엉", 50, 100, 100);

Student[] studentList = {st1, st2, st3, st4, st5};
studentSort(studentList);

student 타입의 배열을 담아 , sort 메서드를 사용 하였다.

 

4. 출력을 위한 forEach

int count = 1;
for (Student student : studentList) {
	System.out.println("no :"+ count);
	System.out.println(student);
	System.out.println();
	count++;
}