编辑:规则是我不能修改公式。这些方法必须为空,并且我必须将预初始化的数组传递给这些方法。这些是 future 作业本身将会出现的限制,这就是为什么我尝试以这种方式玩这个名袋程序。
我正在尝试编写一个“namebag”程序,既是为了好玩,也是为了将来的作业练习。目标是让用户有一个包。在这个包里,他们可以存放25个名字。他们可以一次添加 1 个名称、一次删除 1 个名称、对包进行排序以使名称按字母顺序排列等。基本数组练习。不过,由于我对 Java 不太熟悉,我遇到了一些问题。我有一个函数,它接受数组,将其转换为列表,尝试添加用户选择的名称,然后尝试将该列表转换回原来的数组。然后我有另一个函数尝试显示数组中的所有内容。
当我避免使用菜单、开关盒和方法时,此代码有效。我可以将东西存储到名称袋中,并且可以毫无问题地显示名称,并且不显示空值。但我不明白为什么这些名称不会显示在下面的代码中。有没有办法在Java中获得一种按引用传递的效果?有没有更好的方法来完成这种程序?我很感激任何建议!
这是我的代码:
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Arrays;
public class nameBag {
public static void main(String[] args) {
String[] nameBag = new String[25];
Scanner input = new Scanner(System.in);
while (true){
System.out.println("Welcome to the bag of names.");
System.out.println("1. Add an item to the bag.");
System.out.println("2. Display items in bag.");
System.out.println("0. Exit program.");
int userChoice = input.nextInt();
switch (userChoice){
case 1:
addName(nameBag);
break;
case 2:
displayNames(nameBag);
break;
case 0:
System.out.println("See ya!");
System.exit(0);
}
}
}
public static void addName(String[] nameBag){
ArrayList<String> nameList = new ArrayList<String>(Arrays.asList(nameBag));
Scanner input = new Scanner(System.in);
System.out.println("What name do you want to add to the pack?");
String userSelection;
userSelection = input.nextLine();
nameList.add(userSelection);
nameBag = nameList.toArray(nameBag);
}
public static void displayNames(String[] nameBag){
for (String s : nameBag) {
if (!(s == null)) {
System.out.println(s);
}
}
}
}
最佳答案
在处理之前检查输入是否为 int 类型,或者在处理输入之前进行所需的异常处理。
使用扫描仪的hasNextInt()验证输入是否为int。
Scanner input = new Scanner(System.in);
while (!input.hasNextInt()) {
System.out.println("Please enter int values only");
input.nextLine();
}
否则,如果未提供 int,您还可以执行一些异常处理以引发异常
try {
Scanner input = new Scanner(System.in);
int userChoice = input.nextInt();
} catch (Exception e) {
System.out.println("Please re-enter");
}
转换为数组
Arrays.asList(string.toCharArray());
如果你想以字符串数组的形式返回
ArrayList<String> myList = new ArrayList<String>();
myList.add("value1");
myList .add("value2");
String[] myStringArray = new String[myList.size()];
myStringArray = myList.toArray(myStringArray);
关于Java函数将字符串数组转换为列表,然后返回旧字符串数组而不丢失更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24155519/