언어/JAVA
[JAVA] Overloading
hvoon
2022. 9. 7. 17:37
-메소드의 이름은 같고, 매개변수의 타입, 개수, 순서가 다르면 서로 다른 메소드로
인지하는 문법
-일관된 메소드 이름을 사용하여 사용자에게 직관적인 이름을 사용하게 함
-전달인수(매개변수)의 자료형, 순서 등이 서로 달라도 가능
public static void main(String[] args) {
int maxValue=max(56,87,23);
maxValue=max(56,87,23,54);
maxValue=max(56,87);
double maxValue0=max(123.45,456.56);
System.out.println("56, 87, 23 중 가장 큰 값은 "+maxValue);
System.out.println("56, 87, 23, 54 중 가장 큰 값은 "+maxValue);
System.out.println("56, 87 중 가장 큰 값은 "+maxValue);
System.out.println("123.45, 456.56 중 가장 큰 값은 "+maxValue0);
}
public static double max(double d, double e) {
double m=(d>e)? d: e;
return m;
}
public static int max(int i, int j) {
int m=(i>j)? i:j;
return m;
}
public static int max(int i, int j, int k, int l) {
int m1=(i>j)? i:j;
int m2=(k>i)? k:j;
int m3=(m1>m2)? m1: m2;
return m3;
}
public static int max(int i, int j, int k) {
int m=(i>j)? i:j;
m=(m>k)? m:k;
return m;
}
ublic static void main(String[] args) {
// 전달인수의 갯수가 일정치 않아서 오버로딩으로는 해결할 수 없을 때
int c;
c=max(50,60,80,60,54,60);
System.out.println("max: "+c);
c=max(50,60,80,60,54,60,56,87,69);
System.out.println("max: "+c);
}
public static int max(int...a) {
// 전달되는 전달인수 갯수만큼의 배열이 생성되고
// 그 배열에 전달인수가 저장됨
// 배열 이름은 매개변수 a
int max=a[0];
for(int i=1; i<a.length; i++)
if(max<a[i]) max=a[i];
return max;
}
public static void main(String[] args) {
sort("asc",78,25,56,32,45,78,98); // 오름차순
System.out.println();
sort("dese",87,75,23,65,45,8,56,98,78,12); // 내림차순
}
// 같은형의 갯수가 정해지지 않은 전달인수와 다른 자료형의 전달인수가 동시에
// 전달되어야 한다면 반드시 ...으로 처리할 데이터들보다 왼쪽에 전달되게
// 위치시킴
public static void sort(String order, int...a) {
if(order.equals("asc")) {
for(int i=0; i<a.length; i++) {
for(int j=i+1; j<a.length; j++) {
if(a[i]>a[j]) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
} else {
for(int i=0; i<a.length; i++) {
for(int j=i+1; j<a.length; j++) {
if(a[i]>a[j]) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
for(int i=0; i<a.length; i++)
System.out.printf("%d ",a[i]);
}
public static void main(String[] args) {
int [][]scores;
double[]avg;
int s=getStudentNumber(); // 학생수를 입력받아 리턴하는 메서드
int k=getSubjectNumber(); // 과목수를 입력받아 리턴하는 메서드
scores=new int[s][k+1];
avg=new double[s];
input(scores); // s명의 학생의 k개의 과목 점수 입력
clas(scores,avg); // 총점, 평균 계산
output(scores,avg); // 성적표 출력
}
public static void output(int[][] s, double[] a) {
int stdNum=s.length;
int subNum=s[0].length-1;
System.out.println("\t\t===성적표===");
System.out.println("----------------------------------------------");
System.out.printf("번호\t");
for(int i=0; i<subNum; i++) System.out.printf("과목%d\t",i+1);
System.out.printf("총점\t평균\n");
System.out.println("----------------------------------------------");
for(int i=0; i<stdNum; i++) {
System.out.printf("%d\t",i+1); //number
for(int j=0; j<subNum+1; j++) {
System.out.printf("%d\t",s[i][j]);
}
System.out.printf("%.1f\n",a[i]);
}
System.out.println("----------------------------------------------");
}
public static void clas(int[][] s, double[] avg) {
for(int i=0; i<s.length; i++) {
for(int j=0; j<s[i].length-1; j++) {
s[i][s[i].length-1]+=s[i][j];
}
avg[i]=s[i][s[i].length-1]/(double)s[i].length-1;
}
return;
}
private static void input(int[][] s) {
Scanner sc=new Scanner(System.in);
for(int i=0; i<s.length; i++) {
for(int j=0; j<s[i].length-1; j++) {
System.out.printf("%d student - score of %d subject: ",i+1,j+1);
s[i][j]=Integer.parseInt(sc.nextLine());
}
}
}
public static int getSubjectNumber() {
Scanner sc=new Scanner(System.in);
System.out.printf("number of subjects: ");
return Integer.parseInt(sc.nextLine());
}
public static int getStudentNumber() {
Scanner sc=new Scanner(System.in);
System.out.printf("number of student: ");
return Integer.parseInt(sc.nextLine());
}