Java - 找不到符号构造函数

3

我完全不懂Java,所以如果我的问题很蠢,请原谅。我正在完成一个作业,已经读了几个小时关于主方法的知识,但我还是弄不明白。我在下面放了一些代码。可能离题很远,但我希望实现的是让主方法启动构造函数,但编译时出现错误:“找不到符号-构造函数Player”。我猜测这与构造函数的字符串参数有关,但我已经想不出了。如果有人能解决这个简单的问题,我会非常高兴:)

public class Player {
private String nick;
private String type;
private int health;


public static void main(String[] args)
{
    Player player = new Player();
    player.print();
}


public Player(String nickName, String playerType) 
{

    nick = nickName;
    type = playerType;
    health = 100;
    System.out.println("Welcome " + nick +" the " + type + ". I hope you are ready for an adventure!");
}

   public void print()
{
    System.out.println("Name: " + nick);
    System.out.println("Class: " + type);
    System.out.println("Remanining Health: " + health);
}

1
你正在尝试创建一个“玩家”,但是你没有传递“昵称”或“玩家类型”。 - Louis Wasserman
5个回答

3

Player没有无参构造函数,您可以使用以下方式:

Player player = new Player("My Nickname", "Player Type");

如果您希望提示用户输入Player参数,可以这样读取:

Scanner scanner = new Scanner(System.in);
System.out.print("Enter Player Name:");
String nickName = scanner.nextLine();
System.out.print("Enter Player Type:");
String playerType = scanner.nextLine();
Player player = new Player(nickName, playerType);

我想要做的是让程序启动,然后提示用户输入名称和昵称字符串。这样做会将玩家和类命名为"My Nickname"和"Player Type"吗? - Jarand Boge
找不到符号 - 类扫描器。我做错了什么吗? - Jarand Boge
你需要 import java.util.Scanner; - Reimeus

1
显然你正在使用“0-arg构造函数”,但是你没有这个构造函数:-
Player player = new Player();

请注意,当您在类中提供一个参数化构造函数时,编译器将不会添加默认构造函数。如果您正在使用它,则需要手动添加一个0个参数的构造函数。
因此,您可以添加一个0个参数的构造函数,如下所示:-
public Player() {
    this.nick = "";
    this.type = "";
    this.health = -1;
}

或者,使用参数化构造函数创建对象。

如何使用带参构造函数创建对象?我希望这样做。我的目标是让程序开始运行,然后提示用户输入名称和昵称字符串,而不是在输入字符串之前就需要为playerType和nickName设置任何值。因为我对此完全不了解,所以如果有说不清楚的地方请告诉我 :) - Jarand Boge
@JarandBoge.. 首先读取用户输入的值并将其存储在某个变量中,然后使用参数化构造函数,将这些变量作为参数传递。这并不难,就像您将字符串字面量作为参数传递一样。 - Rohit Jain

0

当你的类显式定义了构造函数,隐式无参构造函数将不会被创建。

你的类中有显式构造函数。

public Player(String nickName, String playerType) 
{

    nick = nickName;
    type = playerType;
    health = 100;
    System.out.println("Welcome " + nick +" the " + type + ". I hope you are ready for an adventure!");
}

尝试调用无参构造函数
 Player player = new Player();

无论是需要在上面的代码中传递参数,还是创建无参构造函数。


0
当构造函数缺失时,Java会创建一个默认构造函数,该构造函数仅调用超类。如果您定义了显式构造函数,则Java不会创建默认构造函数。因此,您可以在类中定义一个默认构造函数,例如:
public Player() 
{   nick = "abc";
    type = "type";
    health = 100;
    System.out.println("Welcome " + nick +" the " + type + ". I hope you are ready for an adventure!");
}

或者修改代码以调用您定义的构造函数。
 Player player = new Player("nick","type");

0

在你的main()方法中尝试创建一个新的Player对象。但问题是,你必须使用你实现的构造函数(Player(String, String)),但你使用了一个没有任何参数的构造函数(Player())。

你应该使用空字符串(例如,如果你想得到一个虚拟玩家)。

Player player = new Player("","");

或者你可以给新的玩家实例指定你想要的名称和类型,例如:

Player player = new Player("flashdrive2049","Player");

敬礼。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接