third가 0일 때도 avg 가 3으로 나눌 수 있게 생각 해봤습니다. boolean a; 로 전역 변수로 선언하고 public void setOprands(int left, int right) { System.out.println("setOprands(int left, int right)"); this.left = left; this.right = right; this.a = false; } public void setOprands(int left, int right, int third) { System.out.println("setOprands(int left, int right, int third)"); this.left = left; this.right = right; this.third = third; this.a = true; } public void avg() { if (a) { System.out.println((this.left + this.right + this.third) / 3); } else { System.out.println((this.left + this.right) / 2); } 이렇게 하면 a값이 true냐 false냐에 따라서 다르게 실행 되기때문에 third에 어떤 값이 들어가도 상관 없습니다. 더 좋은 방법 있으신분 또 써주시면 감사하겠습니다 ㅎㅎ
질문입니다. 2개의 인자를 받았을 때는 평균을 구할 때 2로 나눠야하고, 3개의 인자를 받았을 때는 3개로 나눠야하는데, 동영상 내에서는 모두 2로 나누고 있습니다. 실수라고도 적어주셨지만 제가 궁금한 것은 각각의 상황에 맞춰서 평균값을 구하는 코딩입니다. 어떠한 것이 있는지요?
저도 같은 생각을해서 avg() method 를 이렇게 변경해봤습니다. public void avg() { if (this.third != 0) { System.out.println((left+ right+ third)/2); } else { System.out.println((left+right)/2); }
public void avg() { if(third != 0) print((left + right + third) / 3); else print((left + right) / 2); } 저는 이렇게 바꿨습니다! 왜냐하면 thrid가 0이라는건 third가 없다는 것과 같기 때문에 /2를 해주고 아니라면 /3을 하는 것입니다.
int third가 추가 되었을때 전역변수에 int left랑 int right는 그냥 int left, right로 선언하는데 third는 왜 int third=0이라고 하셨는지 다른 이유가 있는건가요??? 아니면 third도 int third; 만으로 선언할수있나요???
int third로만도 선언할 수 있습니다. third에 0을 대입한 이유는 sum과 avg함수를 보면 left + right + third 라는 줄이 있는데, 여기서 third에 값을 넣어주지 않았다면 우리는 당연히 0이라고 생각하지만, 컴퓨터는 그렇지 않습니다. 컴퓨터는 third라는 할당된 메모리의 위치에 있는(무엇이 있을지 아무도 모르는) 그런 위치에 가서 값을 가져오게 되고 결국 예기치 못한 결과를 초래할 수 있기 때문에 third에 0을 넣어 두개의 숫자끼리의 연산도 문제없이 처리할 수 있게 합니다
third = 0이라고 하신 이유는 컴퓨터는 third;라고 선언만 하면 그 값은 0이아닌 알수 없는 수로 되버립니다. 그래서 연산을 하려하면 오류가 나는것이죠, 같은 이유로 int left=0, right=0, third=0;라고 다 0으로 선언과 초기화를 동시에 하면 좋습니다.(물론, setOprands메소드를 호출하지 않고 연산을 하면 오류가 나게 하고싶다면 int left, right, third=0;로 하시면 됩니다.) 그리고 third도 third라고 선언만 할 수 있습니다.