java - 在另一个类中使用数组并停止随机数据
问题描述
对于学校的项目,我们需要生成数据列表以及删除数据的可能性。我的项目包含以下类:
主要方法 » ShowData.java
public class ShowData {
public static void main(String[] args) {
// Show the menu
Menu menu = new Menu();
menu.Menu();
}
}
与数据的接口 » DataInterface.java
public interface DataInterface {
// User firstname
public final static String[] FIRSTNAME = new String[]{"Homer", "Otto", "Marge", "Lisa", "Maggie", "Patty", "Selma", "Ned", "Nelson", "Ralph"};
// User lastname
public final static String[] LASTNAME = new String[]{"Simpson", "Flanders", "Bouvier", "Muntz", "Wiggum", "Burns", "Smithers", "Carlson", "Prince", "Mann"};
}
在生成、删除和退出之间选择的“菜单” » Menu.java
public class Menu {
public void Menu() {
boolean check = true;
while(check) {
// Ask questions and read the answers
System.out.println("Type 1 to generate names");
System.out.println("Type 2 to delete generated names");
System.out.println("Type 3 to exit program.\n");
Scanner userInput = new Scanner(System.in);
String input = userInput.nextLine();
// Load the classes or exit program
switch(input) {
case "1":
GenerateData genData = new GenerateData();
genData.GenData();
break;
case "2":
DeleteData delData = new DeleteData();
delData.DelData();
break;
case "3":
check = false;
break;
default:
System.out.println("\nWrong input!\n");
}
}
System.out.println("Program closed.");
}
}
生成列表(数组)的类 » GenerateData.java
public String[][] generateData() {
UserName username = new UserName();
UserMail usermail = new UserMail();
System.out.print("\nHow many names do you need?\n");
Scanner scanner = new Scanner(System.in);
int userCount = scanner.nextInt();
System.out.println("");
// Create array
String[][] userArray = new String[userCount][2];
// Fill array
for (int i = 0; i < userCount; i++) {
userArray[i][0] = username.userName();
userArray[i][1] = usermail.userMail();
}
// Print array
for (String[] a : userArray) {
for (String a1 : a) {
System.out.println(a1);
}
System.out.println("--------------------------------");
}
System.out.println("\n");
return userArray;
}
获取名称的类 » UserName.java
public class UserName implements DataInterface {
// Generate Firstname
public String firstName() {
Random randFirst = new Random();
return FIRSTNAME[randFirst.nextInt(FIRSTNAME.length)];
}
// Updated
public String fixedFirst() {
final String fixedFirst = firstName();
return fixedFirst;
}
// Generate Lastname
public String lastName() {
Random randLast = new Random();
return LASTNAME[randLast.nextInt(LASTNAME.length)];
}
// Updated
public String fixedLast() {
final String fixedLast = lastName();
return fixedLast;
}
// Build Username
public String userName() {
return firstName() + " " + lastName();
}
}
构建电子邮件地址的类 » UserMail.java
public class UserMail extends UserName {
// Firstname and lastname from UserName class
public String mailFirst() {
return fixedFirst();
}
public String mailLast() {
return fixedLast();
}
// Build mail address
public String userMail() {
return firstName().toLowerCase() + "." + lastName().toLowerCase() + "@springfieldmail.com";
}
}
最后是要在数组中删除的类。»删除数据.java
public class DeleteData {
public void DelData() {
// Get array
// If array is empty tell inform the user
// If array isn't empty:
System.out.println("Which line do you want to delete?");
Scanner scanner = new Scanner(System.in);
int line = scanner.nextInt();
if (line > array.length) {
System.out.println("Wrong input");
} else {
System.out.println("Line " + line + " has been deleted.");
}
}
}
我省略了包和导入的行。已经有很多文字了。
如您所见,我没有在 DeleteData 类中使用该数组,因为我不知道如何访问该数组。
还有第二个问题:我使用随机的名字和姓氏来生成电子邮件地址,但地址也是随机的。它们应该与名字和姓氏相同。任何想法如何解决这个问题?
更新了问题
解决方案
这里:
public String firstName() {
Random randFirst = new Random();
return FIRSTNAME[randFirst.nextInt(FIRSTNAME.length)];
}
每次在 UserName 类中运行一个方法时,该方法都会返回一个新的随机值。这是一个非常糟糕的主意,可能会影响代码中的所有内容。
当你创建一个new UserName()
时,一旦这个对象应该选择随机值,但从那里开始,对于那个对象,这些初始值应该保持不变。
因此,您必须为该类提供两个(最终)字段,并且在创建时设置这两个字段一次,然后您的方法变成简单的 getter。
对于另一个问题:您的生成类创建新数组。然后“忘记”他们。所以,public void GenData()
你应该有一个方法,而不是一个方法:
public String[][] generateUserData() {
... return ...
反而!
换句话说:一个类创建一个数组对象,并将其返回给您的“主”类。然后,要“删除”该数组,您可以将该数组的引用传递给“删除”类。
另一种方法可能是:
- "main" 为您创建空数组
- 它将该数组传递给另一个类进行填充
- 它将该数组传递给另一个类以“删除”条目
最后:另一个设计问题。您为 UserName 和 UserMail 建模(这很好)。但是随后您使用“原始”数组将它们组合在一起。那没有意义。您应该创建另一个包含 UserName 和 UserMail 实例的类。然后有一个由 NamedUserWithMail 对象组成的单色数组!
推荐阅读
- javascript - 如何在 React.js 中滚动时更改 Bootstrap 导航栏颜色?
- javascript - 如何从使用jQuery的切换按钮隐藏的div中获取文本?
- spring - Spring @Lookup 方法具有使用完整注释配置的 String[] 参数
- javascript - 在 Javascript Promise 中 resolve 和 reject 实际上做了什么
- linux - 如何对 SSH 私钥进行编码然后对其进行解码
- c++ - 排序然后搜索(向量c ++)
- c++ - 如何在 C++ 中将 4 个字节连接到 8 个字节?
- mongodb - 如何$查找/填充数组内的嵌入式文档?
- django - 有没有办法在 django 中使用相关名称来计算孙子数量?
- android - Android Room 增量警告