【问题标题】:Java - How to create a class instance from user inputJava - 如何从用户输入创建类实例
【发布时间】:2013-11-05 19:03:23
【问题描述】:

我希望这个程序询问用户输入,并创建一个名称与用户输入相同的类实例。然后,createMember 类将创建一个文本文件,其中将存储用户的所有数据。我该怎么做?

主要方法如下:

     public static void main(String[] args) {

         String input = keyboard.nextLine();        
         input = new createMember(); // Error. can't do that for some reason?
    }
}

这里是 createMember 类

public class createMember {

public void setMembership() {
    Scanner keyboard = new Scanner(System.in);
    out.println("Username: ");
    String input = keyboard.nextLine();

    try { 
        //Creates a text file with the same name as the username where data is stored.
        Formatter x = new Formatter(input);       
    } catch (Exception e) {
        out.println("Could not create username");
    }
}

//Methods for the user

伙计们...我知道我可以像这样简单地创建一个实例:

  createMember member = new createMember();

我真正想做的是让用户自己做,所以这个程序对很多人来说是灵活和可用的。因此,根据输入,将有一个单独的文件夹来存储每个用户的数据。

【问题讨论】:

  • "并创建一个名称等于用户输入的类实例"什么意思?
  • 如果用户输入 Bob,该类的实例将被称为 Bob,并且会有一个名为 Bob 的 .txt 文件存储该实例的所有数据。
  • 你不能这样做的原因是你试图将一个createMember对象分配给一个String变量。
  • 您不能将createMember 实例分配给line,因为line 被声明为String。如果你不明白这一点,那么你必须了解更多关于 Java 和强类型的知识。
  • 为了呼应@CharlesForsythe 上面所说的,您似乎对Java 和一般编程有一些误解。我建议你先复习一些基本概念。

标签: java class instance java.util.scanner


【解决方案1】:

看起来您需要一个非默认构造函数:(构造函数不能返回任何值,甚至不能返回 void,因为实例是实际返回的。

String input = keyboard.nextLine();        
Member m = new Member(input);

public class Member {
    private String name;
    public Member(String name) {
        this.name = name;
    }

    public void setMembership() {
        try { 
            //Creates a text file with the same name as the username where data is stored.
            Formatter x = new Formatter(name);       
        } catch (Exception e) {
            out.println("Could not create username");
        }
    }
} 

【讨论】:

    【解决方案2】:

    你需要一个构造函数

    public class CreateMember {
        private String input;
    
        public CreateMember(String input){
            this.input = input;
        }
    
        public String getInput(){
            return input;
        }
    }
    

    要访问输入,请使用CreateMember.getInput()

    public static void main(String[] args){
        String input = scanner.nextLine();
        CreateMember member = new CreateMember(input);
    
        System.out.println(member.getInput());
    }
    

    【讨论】:

    • 注意createMember/CreateMember的不一致。
    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多