인프런 커뮤니티 질문&답변

하람님의 프로필 이미지
하람

작성한 질문수

그림으로 배우는 자바, 파트2: 객체지향!

클래스 실행 순서가 궁금합니다.

해결된 질문

작성

·

523

·

수정됨

0

정답 코드 입니다.

public class PlayerTest {
  public static void main(String[] args) {
    // 점수 배열 생성
    int[] points0 = { 10, 9, 9, 8 };
    int[] points1 = { 9, 10, 9, 9 };
    int[] points2 = { 10, 9, 10, 10 };
    
    // 선수 객체 생성
    Player p0 = new Player("Kim", points0);
    Player p1 = new Player("Lee", points1);
    Player p2 = new Player("Park", points2);
    
    // 객체 배열 만들기
    Player[] players = { p0, p1, p2 };
    
    // 선수별 총점 출력
    for (int i = 0; i < players.length; i++) {
      players[i].printTotalPoints();
    }
  }
}

class Player {
  // 필드
  String name;  // 이름
  int[] points; // 점수
  
  // 생성자
  Player(String str, int[] arr) {
    name = str;
    points = arr;
  }
  
  // 메소드
  void printTotalPoints() {
    /* 2. 형식 문자열을 만드세요. */
    System.out.printf("%s -> %d점\n", name, totalPoints());
  }
  
  int totalPoints() {
    int sum = 0;
    for(int i = 0; i < points.length; i++){
      sum += points[i];
    }
    return sum;
  }
} 

 위의 코드에서 'totalPoints()'메소드를 안에있는 for문 조건식 i<points.length;대신 점수 배열을 크키를 구하는데 저는 main메소드가 먼저 실행되는 것으로 알고 있어 points0 배열이 생성될 때 값도 대입했기 때문에 바로 크기를 알 수 있을 것으로 판단해 아래와 같이 points0.length 또는 points[i].length를 사용하려고 했으나 불가능하였습니다.


for(int i = 0; i < points0.length; i++){
      sum += points[i];
    }

 

혹시나 main 메소드 부터 실행되는 것이 아니라면 points변수에 static을 부여해 프로그램이 시작하자마자 점수 배열을 생성을 하고 point[i].length를 사용해봤으나 'illegal start of expression' 라며 잘못된 표현이라는 에러가 나왔습니다.

   static int[] points0 = { 10, 9, 9, 8 };
   static int[] points1 = { 9, 10, 9, 9 };
   static int[] points2 = { 10, 9, 10, 10 };

 

위와 같은 방법으로 풀면 왜 에러가 나는지 궁금합니다!

 

 

답변 2

1

홍팍님의 프로필 이미지
홍팍
지식공유자

point0 은 main 메소드 안에 존재하는 변수입니다.
따라서, totalPoints() 메소드 내에서 사용할 수 없습니다.

 totalPoints() 메소드에서 사용할 수 있는 변수는
3가지. name, points, sum입니다

변수의 스코프,
클래스 스코프,
메소드 스코프 등을 리뷰해보세요

0

하람님의 프로필 이미지
하람
질문자

해답을 찾았습니다. 기초가 부족해 잠시 클래스 간의 관계를 헷갈렸습니다.

Player 클래스는 PlayerTest 클래스 안의 필드에 대한 정보가 없기 때문에 에러가 나온 것입니다.

참 간단한건데 기초가 부족하다보니 이런게 아직도 헷갈리네요 ㅎㅎ그래도 재밌습니다!

하람님의 프로필 이미지
하람

작성한 질문수

질문하기