해결된 질문
작성
·
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 클래스 안의 필드에 대한 정보가 없기 때문에 에러가 나온 것입니다.
참 간단한건데 기초가 부족하다보니 이런게 아직도 헷갈리네요 ㅎㅎ그래도 재밌습니다!