Java函数将字符串数组转换为列表,然后返回旧字符串数组而不丢失更改

标签 java arrays list

编辑:规则是我不能修改公式。这些方法必须为空,并且我必须将预初始化的数组传递给这些方法。这些是 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/

相关文章:

java - 列表接口(interface)排序方法和流接口(interface)排序方法有什么区别?

java - 我正在尝试将文件路径(4 个文件)和文件元数据存储到 hashmap。如何做到这一点?我正在使用蒂卡API

java - 我的代码似乎效率低下并引发 jdbc 异常

java - JAVA中int数组的非顺序迭代性能低下

javascript:用于简单本地化的对象数组

java - 在Java中将集合的集合转换为列表的列表

Python - 从字典中分配和更改列表

java - 如何在Java中检查文件是否为gzip

Java - 公历

javascript - ES6 对象分配部分项目