silsilil
10
2022-05-14 17:32:53
3
105

자바 메소드 호출 관련 질문


안녕하세요... 자바 어린이입니다. 다른 클래스의 메서드를 호출하고 그 안에있는 변수를 호출하려고 하는데 계속 int타입을 Player타입으로 바꿀 수 없습니다라는 말만뜨더라고요... 도저히 혼자서는 모르겠어서 여기에 올려봅니다.

package week10;

public class GuessGame {
	Player guessp1;
	Player guessp2;
	Player guessp3;
	public void startGame(){
		
	int[] gamenum = new int[3]; 
	for (int i = 0; i<3; i++) {
		gamenum[i] = (int)(Math.random()*6) + 1;
		System.out.println("사용자가 맞추어야 할 값들은 " + gamenum[i] + " 입니다.");
	}
	
	Player[] p1 = new Player[3]; 
	Player[] p2 = new Player[3]; 
	Player[] p3 = new Player[3];
	
	for (int i = 0; i<3; i++) {
	guessp1.guess(); 
	guessp2.guess();
	guessp3.guess();
	
	p1[i] = guessp1.number; //여기 세 줄에서 오류가 발생합니다ㅠㅠㅠ
	p2[i] = guessp2.number;
	p3[i] = guessp3.number;
	}
	
	System.out.println("첫 번째 배열의 값은 " + p1 + "입니다.");
	System.out.println("두 번째 배열의 값은 " + p2 + "입니다.");
	System.out.println("세 번째 배열의 값은 " + p3 + "입니다.");
	
		
	//while(true) {
	
		}
	}
package week10;

public class GameLauncher {
	public static void main(String[] args) {
		
		GuessGame game = new GuessGame();
		game.startGame(); 

	}
}
package week10;

public class Player {
	int number;
	public int guess(){ //void에서 바꿈
		number = (int)(Math.random()*6) + 1;
		return number;
	}
}


0
  • 답변 3

  • fastbook
    32
    2022-05-14 18:05:38 작성 2022-05-14 18:12:38 수정됨
    p1[i] = guessp1.number 여기에 플레이어가 Player.number를 담고 싶은 거라면
    Player[] p1 = new Player[3];  => int[] p1 = new int[3]으로 바꿔보세요
    현재는 p1[i] 타입이 Player인데 int형인 number를 할당하려해서 나고 있을거에요 이건 데이터 타입이 달라서 발생하고 있어요
    guessp1.guess(); 에서도 에러가 날거에요
  • silsilil
    10
    2022-05-14 18:14:58

    아까 int타입으로 바꾸니까 

    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "week10.Player.guess()" because "this.guessp1" is null

    라고 오류가 발생하더라고요 이거는 왜 일어나는 건가요?

  • fastbook
    32
    2022-05-14 18:23:07

    java에서 메소드를 실행하려면 인스턴스가 생성 되어야하는데 현재는 선언만 되어 있어서 그렇습니다


    Player class 를 new연산자를 사용해서  new Player() 처럼 해줘야 인스턴스가 생성됩니다

    class와 instance는 달라요

  • 로그인을 하시면 답변을 등록할 수 있습니다.