繁体   English   中英

为什么在尝试使用数组创建 Scoreboard 对象时出现错误?

[英]Why am I getting an error when I try to create the Scoreboard object with an array?

import java.io.*;

public class SaveAndLoad
{
    private Scoreboard[] scoreboard = new Scoreboard[5];
    
    //constructor
    public SaveAndLoad(Scoreboard[] scoreboard)
    {
        this.scoreboard = scoreboard;
    }
    
    public static void save() throws FileNotFoundException
    {
        // 1. Create 5 GameScores
        // 2. Put 5 GameScores into a gamescore[]
        // 3. Create a Scoreboard using a gamescore[]
        
        //Create 5 instances of the Game Class
        GameScore player1 = new GameScore("Rebekah", 199);
        GameScore player2 = new GameScore("Allen", 195);
        GameScore player3 = new GameScore("Sami", 198);
        GameScore player4 = new GameScore("Megan", 142);
        GameScore player5 = new GameScore("Vince", 169);
        
        GameScore[] gamescore = new GameScore[5];
        
        gamescore[0] = player1;
        gamescore[1] = player2;
        gamescore[2] = player3;
        gamescore[3] = player4;
        gamescore[4] = player5;

        //Create an instance of the Scoreboard Class using the GameScore array
        Scoreboard scoreboard = new Scoreboard(GameScore[] gamescore);

最后一行给了我一个错误,我不知道为什么,因为这些是 Scoreboard 类的参数。

您正在尝试直接打印数组。 举个例子:

        // new Bacon ( #baconId, #height, #width )

    Bacon[] baconLand = {
                        new Bacon("001", 1, 1), 
                        new Bacon("002", 1, 1), 
                        new Bacon("003", 1, 1)
                    };

    System.out.println(baconLand);

这个打印语句的结果是:[LBacon;@6f75e721

通常我们必须使用Arrays.toString(Object[] a)来打印一个数组。 但是,除非您覆盖toString()方法,否则仅使用Arrays.toString(Object[] a)在您的情况下不起作用。

例如,如果我在不覆盖toString()方法的情况下执行此操作:

System.out.println(Arrays.toString(baconLand));

我会得到这个结果:[Bacon@6f75e721, Bacon@69222c14, Bacon@606d8acf]

为了显示一些有意义的东西,我可以覆盖 toString() 方法,以便它返回 baconId:

    @Override
public String toString() {
    return this.baconId;
    
}

这个方法在 Bacon 类中被覆盖(在我的例子中)。

System.out.println(Arrays.toString(baconLand));

上面的行现在将打印:[001, 002, 003],这是每个 Bacon 实例的 baconIds。

你也可以参考这篇文章: https : //www.freecodecamp.org/news/java-array-methods-how-to-print-an-array-in-java/

希望这有帮助。

简答

改成:

Scoreboard scoreboard = new Scoreboard(gamescore);

更长的答案

考虑代码:

new GameScore("Vince", 169);

你没有做错

new GameScore(String "Vince", int 169);

所以如你所知,没有必要传递变量类型和值,实际上这样做不仅没有必要而且是错误的

提示

为了使您的代码更简洁,您可以考虑如下编写代码,消除不必要的变量名称。

    GameScore[] gamescore = new GameScore[5];
    
    gamescore[0] = new GameScore("Rebekah", 199);
    gamescore[1] = new GameScore("Allen", 195);
    gamescore[2] = new GameScore("Sami", 198);
    gamescore[3] = new GameScore("Megan", 142);
    gamescore[4] = new GameScore("Vince", 169);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM