NAVER

질문 자바고수님들 도와주세요 ㅠㅠ
비공개 조회수 422 작성일2010.11.29

대충이라도 해석좀 해주세요 ~

 

lass Data{
 String member[][] = {{"200505184", "조규범"},{"200505184", "조원재"},{"200505184","이준영"},{"200505184","강전희"},{"200505184","최찬영"}};
 int score[][] = {{60,60,60,0,0,1},{20,70,30,0,0,1},{30,80,40,0,0,1},{10,60,20,0,0,1},{50,10,60,0,0,1}};
 int i,j,k;
 static int avr=0,sum=0,tavr=0;
 static int top=0,bottom=0;
 public void sumdata(){
  for(i=0;i<5;i++){
   for(j=0;j<3;j++){
    score[i][3]+=score[i][j];
   }
   score[i][4]=score[i][3]/3;
   sum+=score[i][3];
   avr+=score[i][4];
  }
 }
 public void sortdata(){
  for(i=0;i<5;i++){
   for(j=0;j<5;j++){
    if(score[i][4]>score[j][4])
     score[j][5]++;
   }
  }  
 }
 public void printdata(){
  for(i=0;i<5;i++){
   if(score[i][5]==1)
    top=i;
   if(score[i][5]==5)
    bottom=i;
  }  
  tavr=avr/5;  
  System.out.println("     학번                 \t이  름\tJAVA\tC++\tAPI\t총점\t평균\t석차");
  System.out.println("=========================================================================");
  for(i=0;i<5;i++){
   System.out.print(member[i][0]+"\t"+member[i][1]);
   for(j=0;j<6;j++)
    System.out.print("\t"+score[i][j]);
   System.out.println();   
  }
  System.out.println("=========================================================================");
  System.out.println("반총점 : "+sum+"점\t\t반평균 : "+tavr+"점");
  System.out.println("1등    : "+member[top][1]+"\t\t5등    : "+member[bottom][1]);
 }
}
class ScoreList{
 public static void main(String arg[]){
  
  Data dt = new Data();
  dt.sumdata();
  dt.sortdata();
  dt.printdata();
 }
}

 

해석좀부탁드려요~

프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
ah****
초수
본인 입력 포함 정보

이거 실행은 해보셨나요?

member변수에 학번과 이름을 넣어주었고요 score변수에는 JAVA, C++, API 세과목 점수를 입력하였고

총점 평균 석차는 0, 0, 1 이렇게 기본값으로 넣어줘서 JAVA, C++, API 세과목 점수로 계산을 하는 프로그램입니다.

 

class Data{


 String member[][] = {{"200505184", "조규범"},{"200505184", "조원재"},{"200505184","이준영"},{"200505184","강전희"},{"200505184","최찬영"}}; 

// member에 배열로 value값 지정

// ex)member[0][0]="200505184", member[0][1]="조규범", member[1][0]="200505184",

// member[1][1]="조원재" 이런식으로 member[4][1]까지 value값 지정


 int score[][] = {{60,60,60,0,0,1},{20,70,30,0,0,1},{30,80,40,0,0,1},{10,60,20,0,0,1},{50,10,60,0,0,1}};

// 마찬가지로 score에 배열로 value값 지정 score[0][0]=60,score[0][1]=60,score[0][2]=60,

// score[0][3]=0,score[0][4]=0,score[0][5]=1

 

 int i,j,k; // int형 i,j,k 선언
 static int avr=0,sum=0,tavr=0;

 static int top=0,bottom=0;

 // static으로 int형 선언 static을 사용하는 이유(지금 소스에선 꼭 static 필요없음)

 public void sumdata(){ //총점을 계산하기 위해서 만든 메소드
  for(i=0;i<5;i++){  //배열의 총 갯수가 5개이므로 FOR문을 5번 돌려주기위해 만듬
   for(j=0;j<3;j++){ //JAVA, C++, API 세과목만 더해주면 되기때문에 FOR문을 3번만 돌림
    score[i][3]+=score[i][j]; 

 /*처음 i와 j가 0부터 for문이 돌아가기 때문에

i가 0일때 score[0]이 j가 0일때 score[0][0] 이렇게 사용이 됩니다. i값은 0일때 j는 2까지 사용하고

i값이 1이 됐을때는 j는 다시 0부터 시작해서 2까지 사용합니다. 밑에 예를 들면

 score[i][3]+=score[i][j]; 이걸 풀어 쓰면

 score[0][3]=score[0][0]+score[0][1]+score[0][2]

 score[1][3]=score[1][0]+score[1][1]+score[1][2]

 

 score[4][3]=score[4][0]+score[4][1]+score[4][2]

까지 실행되서 총점을 점수 score배열에 넣어주게 됩니다

*/
   }
   score[i][4]=score[i][3]/3; 

 //위에 총점을 구한 값으로 평균값을 score[][4]번에 평균값을 넣어줍니다
   sum+=score[i][3];

//5명의 총점을 더해서 반총점값을 계산하는 작업
   avr+=score[i][4];

//5명의 평균을 더해줌
  } //j의 for문 끝
 } //i의 for문 끝


 public void sortdata(){

  for(i=0;i<5;i++){
   for(j=0;j<5;j++){
    if(score[i][4]>score[j][4])
     score[j][5]++;
   }
  }  
 }

/* 석차를 구하기 위해 사용하는 메소드

score배열 중 마지막인 score[][5]이 석차에 사용됩니다. 기본값으로 1을 다 넣어줬기 때문에

차례대로 0부터 4번까지 비교해서 큰값은 score[][5]를 그대로 나두고 작은값은 score[][5]를

1더해줍니다 0부터 4까지 비교를 했다면 score[0][5]가 자기보다 큰값이 없다면 1 그대로 일테고

큰값이 2개가 더 있었다면 2번 더해져서 3이 되었을껍니다. 5명중에 자신보다 큰값이 2라면 3등일테죠

이런식으로 계산이 되는겁니다. 0부터 4를 비교했다면 다음에 1부터 4를, 그 다음에 2부터 4, 마지막으로

3부터 4를 비교해서 석차가 나오게 됩니다

*/

 


 public void printdata(){
  for(i=0;i<5;i++){
   if(score[i][5]==1)
    top=i;
   if(score[i][5]==5)
    bottom=i;
  }  
  tavr=avr/5;  
  System.out.println("     학번                 \t이  름\tJAVA\tC++\tAPI\t총점\t평균\t석차");
  System.out.println("=========================================================================");
  for(i=0;i<5;i++){
   System.out.print(member[i][0]+"\t"+member[i][1]);
   for(j=0;j<6;j++)
    System.out.print("\t"+score[i][j]);
   System.out.println();   
  }
  System.out.println("=========================================================================");
  System.out.println("반총점 : "+sum+"점\t\t반평균 : "+tavr+"점");
  System.out.println("1등    : "+member[top][1]+"\t\t5등    : "+member[bottom][1]);
 }

/*

printdata()메소드는 말그대로 출력하는 메소드입니다.

score[ ][5]를 사용해서 1과5를 찾는 for문이 있는데 그 이유는 1등과 5등을 찾기 위해서입니다.

1등과 5등을 찾아서 top과 bottom 변수에 같은 값을 넣어주고 sumdata()에 사용한 avr변수를 5로 나누어

반 평균값을 구합니다. 그 다음은 순서대로 출력만 하는 소스입니다 member먼저 출력하고 score 순서대로

출력하고 줄바꿈하고 그 다음사람 출력하고....

member[top][1]이 1등 출력되고 member[bottom][1]이 5등 출력됩니다

끝~~

*/
}

 


class ScoreList{
 public static void main(String arg[]){
  
  Data dt = new Data();  //Data 객체 생성(Data클래스를 사용할수 있게된다)
  dt.sumdata(); //Data클래스에 있는 sumdata()를 실행
  dt.sortdata(); //Data클래스에 있는 sortdata()를 실행
  dt.printdata(); ////Data클래스에 있는 printdata()를 실행
 }
}

2010.11.30.

  • 채택

    질문자가 채택한 답변입니다.

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.