Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以通过连接其他两个变量来创建唯一的变量名吗?_Java_Class_Object - Fatal编程技术网

Java 可以通过连接其他两个变量来创建唯一的变量名吗?

Java 可以通过连接其他两个变量来创建唯一的变量名吗?,java,class,object,Java,Class,Object,我正在尝试创建一个方法,该方法将基于我在同一项目中拥有的另一个类创建一个新的唯一对象。我知道最后一行不会编译,但有没有办法实现同样的目标 理想情况下,如果fName=John和lName=Smith,那么在最后一行创建的新“Employee”对象将被称为“JohnSmith”,但目标只是在每次调用该方法时创建该对象的唯一实例 public static void createEmployee(int number){ Scanner input= new Scanner(System.i

我正在尝试创建一个方法,该方法将基于我在同一项目中拥有的另一个类创建一个新的唯一对象。我知道最后一行不会编译,但有没有办法实现同样的目标

理想情况下,如果fName=John和lName=Smith,那么在最后一行创建的新“Employee”对象将被称为“JohnSmith”,但目标只是在每次调用该方法时创建该对象的唯一实例

public static void createEmployee(int number){

   Scanner input= new Scanner(System.in);
   System.out.printf("Enter first name for employee %s: ",number);
   String fName=input.next();
   System.out.printf("Enter last name for employee %s: ",number);
   String lName=input.next();
   Employee fName+lName= new Employee(fName,lName);
   }

我对Java和面向对象编程是相当陌生的,所以如果我在这个问题上犯了错误,我愿意用不同的方式来解决

你不能那样做。但请记住,许多“约翰史密斯”都存在——你很容易遇到同音词

如果这些都不是问题,您可以使用将键(由姓氏+姓名组成的字符串)绑定到值(您的员工)

祝你好运,欢迎来到StackOverflow

更新


如果同音词存在问题,则需要使用唯一ID;他们向您保证您没有重叠。您可以在员工本身中建立一个ID,并将其放入
列表中,或者您可以将其放入
数组中
-然后ID将成为他们在数组中的位置。

不。您不能将这样的变量组合在一起,但可以说

// Employee fName+lName= new Employee(fName,lName);
Employee employee = new Employee(fName, lName);
如果
Employee
覆盖了
toString()
,那么

System.out.println(employee); 

应该提供您期望的输出。

不,您所描述的是不可能的

作为概念练习,变量应该描述它们所持有的数据类型。这听起来可能很简单,但对于该变量而言,
employee
将比
JohnSmith
SteveJobs
或任何其他名+姓组合更好

如果每次都要创建
员工
的新实例,则应该从方法返回员工实例,而不是将其声明为
无效
。然后你可以用它,不管你喜欢在哪里叫它

public static Employee createEmployee(int number){

   Scanner input = new Scanner(System.in);
   System.out.printf("Enter full name of employee %d, separated by spaces: ", number);
   String fName = input.next();
   String lName = input.next();
   return new Employee(fName, lName);
}

我支持hashmap。动态创建一个人类可读的变量名过于复杂。使用hashmap,可以使用字符串引用对象

HashMap<String, Employee> employees = new HashMap<String, Employee>();

employees.put(fName + lName, new Employee(fName, lName));

考虑数组或java.util.Map,而不是重命名变量。@Patricia Shanahan:你的评论似乎是目前为止最好的答案。所有其他的答案都很好,但是一些非常简单的东西,包括基本的数组,在这种情况下最合适。这是一个很好的解决方案,我可能会在完整版本中实现一个数组,但现在我只是在构建一个测试应用程序,我只需要创建两个实例。谢谢你的建议!如果你有两个名字相同的人使用这种方法,你会过得很不愉快。你可以在第二次投票时投票选出一个答案-P@Makoto,这一点很清楚;但如果出于某种原因,同音异义词不是一个问题,那么这种方法很有效。你应该使用唯一的ID。没错,但这些是他在问题中指定的“理想”参数。谢谢你的建议,我以前对HashMaps一无所知,现在我已经研究了一些你可以用它们做的事情,我肯定会在未来的项目中使用它们。本例中最简单的解决方案是Makoto的建议,让返回值创建变量。再次感谢你的帮助!这实际上是一个简单的解决方案,我试图在这种情况下做什么。我不知道为什么我一开始就不想使用报税表。
employees.get(fName + lName);