Java构造函数将不接受正确的参数
我正在尝试为一个基于文本的游戏制作一个构造器,我只是为了好玩,但无法让Java构造函数将不接受正确的参数,java,constructor,Java,Constructor,我正在尝试为一个基于文本的游戏制作一个构造器,我只是为了好玩,但无法让角色构造器使用字符串和int。使用时,它只需要一个字符 public class Character { public int attack, rangedAttack, manaAttack, defense, rangedDefense, manaDefense, strength, agility, intelligence ,race; String name; public Character(String Na
角色
构造器使用字符串
和int
。使用时,它只需要一个字符
public class Character {
public int attack, rangedAttack, manaAttack, defense, rangedDefense, manaDefense, strength, agility, intelligence ,race;
String name;
public Character(String Name, int Race) {
name = Name;
race = Race;
};
这就是我尝试使用构造函数的地方
public class QuestOfVallock{
public static void main(String[] args){
Character self = new Character();
}
使用参数定义构造函数时,默认构造函数将不再可用,直到您显式声明它: 因此,您应该添加此构造函数:
public Character(){ /* do something */ }
或者调用正确的构造函数。请记住,Java没有参数的默认值。当您使用参数定义构造函数时,默认构造函数将不再可用,直到您显式声明它: 因此,您应该添加此构造函数:
public Character(){ /* do something */ }
或者调用正确的构造函数。记住Java没有参数的默认值。当您使用如下参数定义自己的构造函数时
public Character(String Name, int Race) {
name = Name;
race = Race;
}
public Person(String name)
{
name = name;
}
Java不会为您设置一个默认构造函数,它是未定义的。您需要自己实现它
编辑1:
Java中的变量命名甚至参数都应该是驼峰式的
编辑2:
有时我们定义一个setter方法或构造函数,它们的参数名(变量名)在实例变量上也是相同的。请看一个例子
public class Person
{
private String name; // <--
public Person(String name) // <--
{
}
public void setName(String name)
{
}
}
好吧,这让人困惑。Java将给您一个警告,在变量赋值中没有任何效果,我们也可能认为name
(实例)被赋值了一个新值
要解决此问题,请使用此。
当您使用如下参数定义自己的构造函数时
public Character(String Name, int Race) {
name = Name;
race = Race;
}
public Person(String name)
{
name = name;
}
Java不会为您设置一个默认构造函数,它是未定义的。您需要自己实现它
编辑1:
Java中的变量命名甚至参数都应该是驼峰式的
编辑2:
有时我们定义一个setter方法或构造函数,它们的参数名(变量名)在实例变量上也是相同的。请看一个例子
public class Person
{
private String name; // <--
public Person(String name) // <--
{
}
public void setName(String name)
{
}
}
好吧,这让人困惑。Java将给您一个警告,在变量赋值中没有任何效果,我们也可能认为name
(实例)被赋值了一个新值
要解决此问题,请使用此。
它看起来像是与的命名空间冲突 尝试声明一个包以避免歧义,或者将字符类重命名为其他名称
package mygame;
public class Character {
public int attack, rangedAttack, manaAttack, defense, rangedDefense, manaDefense, strength, agility, intelligence ,race;
String name;
public Character(String name, int race) {
this.name = name;
this.race = race;
}
}
然后像这样实例化角色类:
mygame.Character self = new mygame.Character("John Doe", 1);
更新:正如其他人所指出的,如果定义了一个或多个构造函数,Java不会为您创建默认构造函数(一个没有参数的构造函数)。但我仍然坚持我的答案,即一揽子计划才是前进的方向。不鼓励使用默认包,它只适用于开始开发的小型应用程序。请参见它看起来像与的命名空间冲突 尝试声明一个包以避免歧义,或者将字符类重命名为其他名称
package mygame;
public class Character {
public int attack, rangedAttack, manaAttack, defense, rangedDefense, manaDefense, strength, agility, intelligence ,race;
String name;
public Character(String name, int race) {
this.name = name;
this.race = race;
}
}
然后像这样实例化角色类:
mygame.Character self = new mygame.Character("John Doe", 1);
更新:正如其他人所指出的,如果定义了一个或多个构造函数,Java不会为您创建默认构造函数(一个没有参数的构造函数)。但我仍然坚持我的答案,即一揽子计划才是前进的方向。不鼓励使用默认包,它只适用于开始开发的小型应用程序。首先请参见避免使用名称
Character
,因为java.lang
包中有一个名为Character
的类,它是基本数据类型char
的包装类java.lang.Character
类用于自动装箱转换
秒将该类重命名为
Champion
,它肯定会工作。:)
第三您没有向参数传递正确的参数。构造函数需要参数,而将参数留空 它看起来像什么 因此,您的
main()
如下所示:
public static void main(String[] args){
Champion self = new Champion("Little Java Child",RaceConstants.JAVA_CHILD; //<-- Unique race
}
publicstaticvoidmain(字符串[]args){
Champion self=新冠军(“小爪哇孩子”,racesconstants.Java_Child;//第一名
避免使用名称Character
,因为java.lang
包中有一个名为Character
的类,它是基本数据类型char
的包装类
java.lang.Character
类用于自动装箱转换
秒
将该类重命名为Champion
,它肯定会工作。:)
第三
您没有向参数传递正确的参数。在将参数留空时,构造函数需要参数
它看起来像什么
因此,您的main()
如下所示:
public static void main(String[] args){
Champion self = new Champion("Little Java Child",RaceConstants.JAVA_CHILD; //<-- Unique race
}
publicstaticvoidmain(字符串[]args){
Champion self=new Champion(“小Java孩子”,racesconstants.Java_Child;//您定义了一个以字符串和int作为参数的构造函数,您必须用以下方式调用它:
Character self = new Character("Bobby the mighty elf", 1);
如果未定义构造函数,则不能调用没有参数的构造函数,除非未在类中定义另一个构造函数
此外:
- 不要定义名为
Character
的类,因为它已经是包java.lang中一个重要类的名称
- 对变量(参数或成员变量)使用更好的命名约定:它们不应该大写,而应该使用camelCase
<> LI>最好将变量封装为私有的,使用GETT/SETER访问它们。如果它们是常数(在对象生存期内不会改变),则可以考虑将它们变成“公共最终”或只定义吸气剂而不是SETTER。
您定义了一个以字符串和int作为参数的构造函数,您必须这样调用它: