(급함!) 자바 클래스 기초 질문입니다(평균 구하는 프로그램만들기)

(급함!) 자바 클래스 기초 질문입니다(평균 구하는 프로그램만들기)

작성일 2005.10.22댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요..

자바 클래스 문제중 모르는게 있어서 질문 올립니다.

 

1개의 클래스 프로그램과 client 프로그램을 사용해서 학생의 평균을 구하는 프로그램을 만들어야 합니다. client 프로그램에서 유저한테 2학생의 3개의 테스트점수를 받아서 student class에 있는 average라는 method를 사용해서 평균을 구한후 프린트 해야합니다.

 

student class안에 3개의 테스트 점수를  private variable로 지정하라구 되어있습니다.

 

client program에서는 2개의 student1,student2라는 오브젝트를 만들고

3개의 테스트 점수를 각 학생으로부터 받은후

average메소드를 사용해서 평균을 구하고

2개의 점수를 비교하라고 써있습니다.

 

우선 제가 작성한 코드는요..

------------------------------------------

Student class

--------------------------------------------

 

public class Student
{
 private int Score1 = 0; //위에 3개의 테스트 점수를 private으로 지정하라고 해서 한건데요..이렇게 하는게 맞나요??
 private int Score2 = 0;
 private int Score3 = 0;
 
 public double average(int Test1, int Test2, int Test3) //average라는 메소드인데, TestAverage라는 자바 파일에 있는 Test1,Test2,Test3 숫자를 불러오게 한건데 맞는건가요??
 {
  Score1 = Test1;
  Score2 = Test2;
  Score3 = Test3;
  
  double AverageScore = (Score1 + Score2 + Score3) / 3;
  
  return AverageScore;
  
 }
 
}

 

----------------------------------------------

 TestAverage

------------------------------------------------

 

public class TestAverage
{
 public static void main(String[]args)
 {
  EasyReader console = new EasyReader();
  
  int Test1,Test2,Test3;
  
  Student student1 = new Student(); //우선 2개의 오브젝트를 만든후
  Student student2 = new Student();
  
  System.out.println("Enter 3 test scores for student1: ");
  Test1 = console.readInt(); //3개의 테스트 점수를 유저로부터 받습니다.
  Test2 = console.readInt();
  Test3 = console.readInt();
  
  student1.average(Test1, Test2, Test3); //그 다음에 average 메소드를 사용하는건데요..()안에 들어가는게 TEst1,Test2,Test3맞나요??
  
  System.out.println(AverageScore); //분명히 student 클래스에서 AverageScore를 return하라고 햇는데요, 컴파일 하면 AVerageScore를 찾을수 없다고 나옵니다;;

뭐가 잘못된것인지..??

  
  System.out.println("Enter 3 test scores for student2: ");
  Test1 = console.readInt(); //다음 학생의 3개의 테스트 점수를 받습니다..
  Test2 = console.readInt();// 그런데 student1하고 student2의 테스트 점수를 받을때 각각 다른 variable를 써야하나요??

Student1는 TEst1,Test2,TEst3를 사용하고 student2는 score1,Score2,Score3이렇게 지정해줘야 하나요, 아님 그냥 TEst2,Test2,Test3를 사용해도 괜찮은가요??
  Test3 = console.readInt();
  
  student2.average(Test1,Test2,Test3); 
  
  System.out.println(AverageScore); //이곳 역시 AverageScore variable이 없다고 나옵니다.
  
  
 }
 
}
  
  저번에도 한번 지식인에 글을 올렸는데 만족스러운(?) 답변이 올라오지 못해서 다시 한번 질문드립니다.

자바 클래스 배우고 나서부터 조금 어려워 지네요..ㅜ_-

 

이왕이면 새로운 코드를 써주시기보다는..주석을 달아서 자세히 설명 해주세요..ㅜ_-;;

물론 새로운 코드를 써주셔도 좋습니다(위에 있는 사항에 맞게;;)

 

고수님들 정말 부탁드립니다(__)



profile_image 익명 작성일 -

아래 copy n paste하면 될 겁니다.

혹시 이게 학교 숙제라면...

아래거 참고만 하고 직접 해보시구요..

(프로그래밍은 기회를 놓치면

혼자 공부하기 너무 힘듭니다.)

 

주변에 잘하는 사람 있으면

자꾸만 물어보세요..

혼자 공부하면 3일 걸려도 해결 못하는거

옆에 사람에게 물어보면 바로 답 나오는 경우가

무지 많은 것이 programming입니다.

 

저도 너무 고생했어서

java 관련 질문들 나오면 반가워서

아무에게나 도움이 되면 좋겠다는 심정으로

아는 한도 내에서 답을 답니다. ^^;;

 

java공부하신다면

http://java.sun.com

http://javanuri.co.kr

정도는 알아두시는 게 편할 것 같네요..

 

아래 주석 달아놨구요..

보면 이해...까지는 아니어도..

책 보면서 보시면 이해 될 듯..^^

 

열심히 공부하세요..^^;

 

제 환경에서는 compile -> run 해보니

돌아가네요..

아마 그냥 code를 copy n paste해서 compile->실행시키면

돌아갈 겁니다.

 

 

import java.io.*; // 저에게는 EasyReader라는 파일이 없는 관계로 import 했습니다.

 

/********************************************
* TestAverage
********************************************/

 

public class TestAverage
{
 public static void main(String[]args){
  // EasyReader가 뭔지 모르겠군요...
  EasyReader console = new EasyReader();
 
  int test1,test2,test3;
 
  Student student1 = new Student(); //우선 2개의 오브젝트를 만든후
  Student student2 = new Student();
 
  System.out.println("Enter 3 test scores for student1: ");
  test1 = console.readInt(); //3개의 테스트 점수를 유저로부터 받습니다.
  test2 = console.readInt();
  test3 = console.readInt();

  // 일단 평균을 구하기 전에 student의 성적을 입력해 주어야 겠죠?^^;
  student1.setScore(test1, test2, test3);

  // 성적이 입력이 되었으니, 별도의 과정없이 평균을 내면 되겠죠?^^;
  // ?? 그 다음에 average 메소드를 사용하는건데요..()안에 들어가는게 Test1,Test2,Test3맞나요??
  //    - 원래 의도대로 하신다면 맞기는 한데, 그렇다면 객체를 만든 의미가 없어지겠죠?^^;
  double result = student1.average();

  // ?? 분명히 student 클래스에서 AverageScore를 return하라고 햇는데요, 컴파일 하면 AVerageScore를 찾을수 없다고 나옵니다;;
  // averageScore는 Student class 안의 변수 입니다.
  // 여기서는 볼 수가 없지요...
  // 그게 java같은 OOP의 장점이지요..
  // C++처럼 namespace 갖고 고민 안 해도 되는...

  // System.out.println(AverageScore);
  // 그러므로 이건 잘못된 것이고..
  // 위에서 double 형의 result로 결과를 받았으니까... ( result 말고 averageScore로 잡아도 됩니다.)
  System.out.println(result);
 
  System.out.println("Enter 3 test scores for student2: ");
  test1 = console.readInt(); //다음 학생의 3개의 테스트 점수를 받습니다..
  test2 = console.readInt();// 그런데 student1하고 student2의 테스트 점수를 받을때 각각 다른 variable를 써야하나요??

  // ?? Student1는 TEst1,Test2,TEst3를 사용하고 student2는 score1,Score2,Score3이렇게 지정해줘야 하나요, 아님 그냥 TEst2,Test2,Test3를 사용해도 괜찮은가요??
  // 어차피 이미 student1의 점수들은 객체에 따로 저장시켜 놨으니
  // 덮어써도 아무런 상관이 없지요...
  test3 = console.readInt();
 
  student2.setScore(test1,test2,test3);
  System.out.println( student2.average() ); // 이렇게 바로 출력해도 된답니다.
 }
};

/*********************** 절취선 ******************************/

/**
* ### Student class ###
*
* score란 변수를 만들어 평균을 구한다고 하면,
* 변수를 받자마자 바로 평균을 return하는 것은
* 별로 맞는 방법이 아닌 것 같구요..
* 아마 변수를 Student class형의 object에
* 저장했다가 평균을 구해야 하지 않을까 싶습니다.
*
* 그래서 setScore라는 함수를 만들고,
* 평균을 만드는 함수를 따로 만들어 주었습니다.
*
* class Student 앞에 public을 뺐습니다.
* 아래 TestAverage라는 class와 같은 파일에 넣으려면 빼야 합니다.
* 만약 다른 파일에 넣으려면
* class 앞에 다시 public을 붙이고,
* 아래 절취서 부분에서 파일을 나눠주면 됩니다.
*/

class Student
{
 // 이렇게 하는 것은 맞는데, java에서는 변수명을 대문자로 쓰지 않는 경향이 있지요..
 // java convention이라고 하지요..
 private int score1 = 0;
 private int score2 = 0;
 private int score3 = 0;

 /**
 * score를 setting 해주는 함수입니다.
 * 이렇게 하면 test변수 값이 score 변수 값으로 들어가게 되지요..
 * 앞에 이름은 반드시 public으로 해야
 * 다른 class (앞으로 나올 TestAverage class)에서 불러 올 수 있습니다.
 */
 public void setScore(int test1, int test2, int test3){
  score1 = test1;
  score2 = test2;
  score3 = test3;
 }

 /**
 * 이미 score 값이 class Student 형의 object에 들어있다고 가정하고
 * average를 call 합니다.
 * 그러니 변수를 받아올 필요는 없겠죠?^^;
 */
 public double average(){
  // integer로 사칙연산을 하면, integer밖에 안 나옵니다.
  // double 값이 나오게 하고 싶다면,
  // 어디선가 임의로 casting을 해줘야 합니다.
  double averageScore =((double)(score1 + score2 + score3)) / 3;
  return averageScore;
 }
};

/*** 여기서부터 EasyReader ***/

/**
* ### EasyReader ###
*
* 질문을 올리신 분은 EasyReader란 class를 갖고 계시나 본데..
* 저에게는 당연히 그런 class는 없으므로
* compile과 실행을 확인해보기 위해서
* 어쩔 수 없이 하나 만들었습니다.
* 기존의 EasyReader class가 있으시다면..
* '여기서부터 EasyReader' 밑으로는 지우셔야 겠죠?^^
*/

class EasyReader
{
 public int readInt(){
  BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
  String inputString = null;
  int inputInt = 0;

  System.out.print( "Input an integer please... : " );

  try{
   inputString = in.readLine();
   inputInt = Integer.parseInt( inputString ); 
  }
  catch( IOException ex ){
   System.out.println("Your input is wrong somehow~!");
  }
  catch( NumberFormatException ex ){
   System.out.println("Your input is not integer~!" );
  }

  return inputInt;
 }
};

자바 클래스 질문

클래스 만들기 연습중입니다. [StudentInfo.java]... 평균 구하는 아래 메소드 보시면 우선... 있으시면 main메소드와 함께 질문주세요.

기초자바 문제 왜않되죠??

... public class 과제 { //자바프로그래밍 과목을... 받은학생들의수를 구하는 프로그램을 작성하시오 //-가정:키보드로 부터Scanner클래스...

자바프로그래밍 관련 질문.

... 합과 평균구하는 프로그램을 작성하라. 제가,, 이제 막 자바 코딩을 배우기 시작한... Grade 클래스는 8칸의 배열을 가지고 있고, Score...

자바 왕초보 도와주실 분..

제가 자바 과제 중에 궁금한 점이 생겨서 교수님께 메일을 보냈는데, 기초 지식의 부재로 교수님의 답변이 해석이... 네, 상속 받는 클래스 만들기만 하는게 아니라 실제로 A a...

자바프로그래밍 관련 질문.

... 합과 평균구하는 프로그램을 작성하라. 위와같은 문제로 클래스 2개와 배열 사용하여... 코린이여서,, 질문좀 드립니다!! 안녕하세요....

EasyIn클래스 이용해서..자바프로그램...

... 면적을 구하는 프로그램이랑요. 세 정수를 읽어들여 이들의 합, 평균, 곱, 가장 작은 수를 출력하는 프로그램이요. 또 EasyIn클래스 사용 안하는 그냥 프로그램도...