결과값이 왜 이렇게 나오는지 모르겠네요..
사자자리
학교교재에 나와있는 프로그램입니다.. 분석을 하던중 이상한점이 있어서 그러는데요.. 일단 표시한쪽으로 GoGo!
class Test{
String subject;
int point;
void setPoint(String s, int p){
subject = s;
point = p;
}
String getPoint(){
return subject + : + point;
}
}
class Student{
int id;
String name;
int subnum;
Test test[];
Student(int i, String n, int s){
id = i;
name = n;
subnum = s;
test = new Test[s];
for(int j=0; j s; j++)
test[j] = new Test();
}
String getName(){
return id + : + name;
}
int getGrade(){
int sum = 0;
for(int i = 0; i subnum; i++)
sum += test[i].point;point변수는 다른 클래스인데 어떻게 여기서 불러오죠? 이것도 궁금..이 프로그램에서 배열의
흐름이 어떻게되는지가 아직 확실하지 않아서요..
return sum;
}
int getGrade(int a){ 이 메소드요,, 프린트스코어 메소드로부터 5를 받고
int base = 100 * subnum / a; 100*3(3은 스튜던트생성자에서 3으로 받았기 때문에 3맞죠?)나누기 5하면은 60
int rank = getGrade() / base + 1; getGrade메소드의 반환값이 254(김주현껄 예로들고있어용) 나누기 (60+1=61) 61
return rank;위에서 실행된 값을 정확하게 게산기로 두들겨봐도 4.16어쩌고저쩌고 나오는데 왜
나중에 출력되는 프린트 스코어 메소드에서 5로 출력되는지 모르겠어요.. 저걸 반올림한다쳐도 그냥 4인데
}
void printScore(){
System.out.println(getName());
for(int i = 0; i subnum; i++)
System.out.print(test[i].getPoint() + );
System.out.println();
System.out.println(총점 + getGrade());
int rank = 5;
System.out.println(rank + 단계평가 + getGrade(rank));
System.out.println();
}
}
class Jung{
public static void main(String args[]){
Student kim = new Student(12, 김주현, 3);
kim.test[0].setPoint(국어, 95);
kim.test[1].setPoint(영어, 83);
kim.test[2].setPoint(수학, 76);
kim.printScore();
Student lee = new Student(7, 이 진, 3);
lee.test[0].setPoint(국어, 66);
lee.test[1].setPoint(영어, 97);
lee.test[2].setPoint(수학, 72);
lee.printScore();
}
}
결과값
12:김주현
국어:95 영어:83 수학:76
총점 254
5단계평가 5
아참 그리고
-
사랑은아픔
1. point변수는 다른 클래스인데 어떻게 여기서 불러오죠? 이것도 궁금.. 이 프로그램에서 배열의 흐름이 어떻게되는지가 아직 확실하지 않아서요.. - Student class의 생성자안에서 new Test(); 인스턴스를 생성하셨습니다 또한 Test class에서 point의 접근권한이 디폴트(public)으로 되어있어서 접근이 가능합니다. 게터 세터를 사용하였다면 private로 해야하는데 어차피 그냥 예제니깐요...
2. int형 254/5+ -
발랄한그1녀
아 저도 원인을 찾았어요 ㅋ 님이랑 같은생각으로.. 암튼 감사합니다.. 저기 그건글코 배열문제 말인데요.. 지금 예를 들으신게 저 프로그램상의 메인메소드에서의 시점에서 생각해보라는 뜼이죠? 근데 메인메소드에서는 getGrade라는 메소드를 언급하지않아서 아직도 헷갈려요.. 아 이것만 해결하면 이 프로그램 완벽히 분석끝인데;;
-
푸르
아 그렇군요~
먼저 254/60+1 를 하나하나 뜯어 봐요~
우선 자바 에서의 산술 연산은 곱하기 나 나누기가 덧셈이나 뺄샘보다 순위가 높아서 빨리 됩니다
그래서
(254/60)+1
과같습니다 그래서
254/60 이 먼저 실행되죠
실행값은 4.2333333 이렇게 나옵니다. 그후에 (254/60)+1 부분에서 덧셈이 수행되어
4.2333+1
이기때문에
5.2333
이 되구요~~
5.23333 을
정수형 변수 rank 에 넣기 때문에 -
싴흐한세여니
엥 254/60+1한 값을 랭크변수에 대입시키는건데 그 대입된 값에 또 플러스1을 시키라는 말은 없는거 같은데요 헷갈려요.. 그리고 밑에 이진꺼는 저 프로그램대로 하면 3.8정도 되서 반올림하면 4가 나오던데요;; 음,,모가몬지..ㅠㅠ
-
진이
이렇게 생각해봐요 254/60+1
이러면 나누기 먼저 되죠? 나누면 대략 4.1~
거기다 1 더하면 5.1~~
이거를 정수형 강제변환시키면~ 소수점은 사라져서 5가 되요 ㅋ -
큰재
b 클래스 에서 a 클래스 안에 있는 test 변수 사용하기,
class a{
int test;
}
class b{
A here=new A();
here.test=3;
}