【问题标题】:Java ~ Incompatible types when returning an array?Java ~ 返回数组时类型不兼容?
【发布时间】:2013-11-30 20:41:17
【问题描述】:

我已经在同一个项目中完成了这个(几乎)完全相同的数组返回,其中一个类 (PlayerArray) 可以编译,但由于某种原因,当我尝试在我的 (Planet) 类中返回一个数组时它给了我错误“Incompatible Types”但我不明白为什么会这样,我的意思是该方法返回一个数组并且它确实返回了一个数组?如果有人可以解释差异以及为什么一个有效而另一个抱怨“不兼容的类型”,那就太好了。谢谢!这是我的一些代码。

这是我的启动器。

public class Launcher
{
private static Planet myTest;
private static PlanetInfo myPlanetInfo;
private static PlanetInfo[] planetArray;
private static Player[] arr; //NEED THIS FOR arr = myArray.getPlayerArray(); to work..
public static void main(String[] args)
{
    Planet myPlanetArray = new Planet();
    PlayerArray myArray = new PlayerArray();
    myPlanetArray.getPlanetArray();
    myArray.getPlayerArray();
    planetArray = myPlanetArray.returnCost();/////////////////////THIS IS THE BROKEN LINE
    arr = myArray.getPlayerArray(); //holy moses this worked...
    System.out.println("player 1's ID: " + arr[0].viewID());
    System.out.println("player 1's balance: " + arr[0].viewBalance());
    arr[0].playerGo();
}
}

下面的播放器数组有效..

public class PlayerArray
{
Scanner scan = new Scanner(System.in);
private int numbHuman;
private Player[] arr;
private String[] userName;
private int[] userID;
private int startingMoney;
private int startingPosition;
private int b;
public PlayerArray()
{
    Scanner scan = new Scanner(System.in);
    System.out.println("How many players wish to play? Values of 2 through 8 accepted.");
    numbHuman = scan.nextInt();
    System.out.println(numbHuman + " players selected.");
    while (numbHuman < 2 || numbHuman > 8)
    {
        System.out.println("Invalid entry, try again.");
        numbHuman = scan.nextInt();
    }       
    arr = new Player[numbHuman];
    userName = new String[numbHuman];
    userID = new int[numbHuman];
    startingMoney = 1500;
    startingPosition = 0;
    b=0;
    for(int i = 0; i < arr.length; i++)
    {

        userID[i] = b;
        System.out.println("Player " + (i + 1) + ", Please enter your first name:");
        userName[i] = scan.next();
        arr[i] = new Player(userName[i],startingMoney,userID[i],startingPosition);
        b++;
    }
}

public int viewNumbHuman()
{
    return numbHuman;
}

public Player[] getPlayerArray()
{   
    return arr; //WORKS HERE...
}
}

这是无法编译的类...

public class Planet
{
Scanner scan = new Scanner(System.in);

private static Player[] arr;

private static Planet[] planetArray;

private int cost;

private int playerPosition;

public Planet()
{

    Planet testPlanet = new Planet();
    PlanetInfo[] planetArray;
    planetArray = new PlanetInfo[40];

    planetArray[1] = new PlanetInfo("Tatooine Mos Eisley",60,1,1,-1,2,0,0);
    planetArray[3] = new PlanetInfo("Tatooine Mos Espa",60,3,1,0,-1,0,0);

    //MORE of this, not important


    planetArray[37] = new PlanetInfo("Coruscant Jedi Temple",350,37,8,-1,35,0,0);
    planetArray[39] = new PlanetInfo("Coruscant Senate",400,39,8,-1,50,0,0);
}

public PlanetInfo[] getPlanetArray()
{
    return planetArray;
}

public int testCost()
{
    return cost;
}

public int returnCost()
{
    return planetArray[arr[0].viewPosition()].testCost(); //**** HERE *WAS* THE ISSUE
}
/*
public int what()
{
return planetArray[arr[0].viewPosition()];
}
*/

【问题讨论】:

  • 为此,Planet 必须是 PlanetInfo 的子类。
  • 我刚学的时候对子类不熟悉,你指的是我的Launcher类的新问题吗?
  • 不,这是对您在上面尝试的内容的一般性评论。

标签: java arrays compiler-errors incompatibletypeerror


【解决方案1】:

planetArray 字段声明为

private static Planet[] planetArray;

并且您正试图在带有签名的方法中返回它

public PlanetInfo[] getPlanetArray()

你的方法

public void Planets()

具有您期望的类型的局部变量,但这与 getPlanetArray 方法无关。

Planets 方法也是一个令人困惑的方法,因为看起来您可能打算创建一个构造函数,但给了它错误的签名作为构造函数并在其中实例化了一个 Planets 对象。

【讨论】:

  • 你已经回答了我最初的问题,我会选择你的作为答案,谢谢。我知道这本质上只是复制了错误的名字导致了错误,不是吗?无论如何,这让我在启动器中遇到了另一个错误。我现在将更新我的代码以表明,我得到与上次相同的错误。编辑:更新代码以反映问题。
  • 您遇到了同样的错误,因为您犯了类似的错误。如果你引用给定类型的东西,你会得到那个类型,并且必须将它分配给兼容的东西。在新情况下,您正在调用返回 int 的方法并尝试将值分配给不兼容的 PlanetInfo[]
猜你喜欢
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多