【问题标题】:how do is this the correct way of writing this <class name> <object name > = new constructor name?这是如何编写此 <class name> <object name> = new constructor name 的正确方法?
【发布时间】:2014-03-25 00:09:05
【问题描述】:

有人可以帮我解决这段代码最后一部分的编译错误吗 它的说法创建构造函数请帮助

public class Officer {

     public static void main(String args[]) {

         Scanner input = new Scanner(System.in);

         System.out.print("Enter the name of the Soldier: ");

         String name = input.nextLine();

         System.out.print("Enter the sex of the Soldier: ");

         String sex = input.nextLine();

         System.out.print("Enter the Age of the Soldier: ");

         String age = input.nextLine();

         Soldier soldier = new Soldier(name, sex, age);
    }
}

package officer; 

public class Soldier { 

    private String soldierName; 
    private int soldierAge; 
    private char soldierSex; 

    public void Soldier( String name, char sex, int age) { 
         soldierName = name; 
         soldierSex = sex; 
         soldierAge = age; 
    } 

    public String getSoldierName() { 
        return soldierName; 
    } 
    public char getSoldierSex() { 
         return soldierSex; 
    } 
    public int getSoldierAge() { 
        return soldierAge; 
    }
} 

【问题讨论】:

  • 你有匹配Soldier(name,sex,age)的构造函数吗?
  • 在这里打印 stackTrace !!!!!!
  • 问题可能是,Soldier 类中根本没有任何构造函数,或者构造函数中有不同类型的参数,例如 Soldier (String name, String sex, int age)
  • 是的,对于我的另一个名为士兵的类,我有一个名为 public void Soldier(String name, char sex, int age)的构造函数
  • 构造函数没有“返回值”。在这里查看更多信息:stackoverflow.com/questions/1788312/…

标签: java


【解决方案1】:

Soldier 类需要定义一个匹配的构造函数

public Soldier (String name, String sex, String age) {
    // do stuff
}

这是当你调用new Soldier(name, sex, age)时被执行的方法

【讨论】:

    【解决方案2】:

    没关系,除了:

    • sex 应该是枚举类型
    • age 应该是整数(或浮点数)类型
    • 您应该验证用户输入

    SEX 枚举:

    public enum SEX {
        MALE, FEMALE
    }
    

    构造函数:

    public Soldier (String name, SEX sex, int age) {
    
    }
    

    【讨论】:

    • 是的,我在另一个叫士兵的班级里有这个,可以吗
    【解决方案3】:

    你需要类似的东西:

    public class Soldier {
    
        public Soldier(String name, String sex, int age) {
    
        }
    }
    

    编辑:使用提供的新信息,您应该删除public void Soldier 中的void,因为void 意味着public void Soldierclass Soldier 的方法,而它应该是构造函数。

    【讨论】:

    • 请不要使用单个字符作为参数名 ;)
    • 因为?我总是这样。
    • 变量的名字应该有一个好名字,你知道变量是什么以及它代表什么。 :)
    • 如果我要声明String name;,然后在构造函数中写入:name = n; 。我看不出这有什么问题。否则我会得到this.name = name;,这让我感到困惑。
    • 示例:如果有人使用您的构造函数并看到参数:Soldier(String n, String s, int a),不清楚您的意思,他必须打开并读取单个 cmets参数/文档。主题:stackoverflow.com/questions/991757/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多