有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java操作String类型的arraylist

我遇到了一个问题,给我带来了很多麻烦,我甚至不知道该怎么办。这是到目前为止的作业和我的代码

使用存储和处理名称的ArrayList创建系统。 使用标准输入不断提示用户进行以下操作

Enter command or quit:(如果他们输入quit--quit程序)

命令

  • add <name>:将字符串<name>添加到ArrayList
  • change <name> <newName>:更改ArrayList中 有<name><newName>
  • delete <name>:删除Arraylist中的所有{}项
  • print:打印ArrayList
  • amount:显示ArrayList中项目的数量

系统必须工作。。。并有正确的错误消息

import java.util.*;

public class NameManipulation {

    static Scanner console = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.println("enter a command, or quit!");
        ArrayList<String> names = new ArrayList<String>();
        String command = console.next();
        int size = names.size();
        for (String x = null; size; x++) {
            if (command == "add") {
                String assignment = console.next();
                names.add(assignment);
            }
            if (command == "change") {
                String newname = console.next();
                names.set(names.size, newname);
            }
            if (command == "delete") {
                String delete = console.next();
                if (delete == names)
                    ;
                names.remove();
            }
            if (command == "print") {
                System.out.println(names);
            }
            if (command == "amount") {
                amount = (names.size - 1);
                System.out.println(amount);
            }

            if (command == "quit") {
                System.out.println("You just quit!");
                break;
            } else
                System.out.println("command not found!");

            System.out.println(names);
        }
    }
}

共 (4) 个答案

  1. # 1 楼答案

    如果我试图完成这项任务,我会使用列表,而不是数组列表。我希望这个方法有用!这是C代码。我不知道确切的Java语法,但它似乎有很多相似之处。我希望这种方法有帮助

    static void Main(string[] args)
        {
            string statement = "";
            bool executed_command_properly;
            while (statement != "quit")
            {
                executed_command_properly = false;
                statement = Console.ReadLine();
                string[] my_statement_elements = statement.Split(' ');
                string command = my_statement_elements[0];
    
                //could possibly use an array for inputs
                string input1 = my_statement_elements[1];
                string input2 = my_statement_elements[2];
    
                switch(command)
                {
                    case "add":
    
                        // do stuff
    
                        executed_command_properly = true;
    
                        break;
    
                    //other cases
                }
                if (executed_command_properly != true)
                {
                    //error messages
                }  
            }
        }
    
  2. # 2 楼答案

    您可以尝试使用一个开关块,它可以将您的控制语句流化。如上所述,学习何时使用==和何时使用。等于()。一个比较引用(==)另一个比较内存位置,重要的是字符串是一个对象,当你创建一个新字符串时,它比较的是地址而不是值(如果我错了,请原谅)

    switch(command){
    case "add": names.add(assignment);
    break;
    case "change": ..... etc.
    
    }
    
  3. # 3 楼答案

    不要使用==(在测试引用相等的Java中);你想测试对象值是否相等(我建议不区分大小写),所以你想使用String.equalsIgnoreCase,你可能应该在其他测试中使用else if——例如

    if(command.equalsIgnoreCase("add")) {
      String assignment = console.next();
      names.add(assignment);
    } else if // ...
    

    而且,这是错误的

    for (String x = null; size; x++) // null++ is going to give you a bad time.
    

    我想你想要

    for (int x = 0; x < size; x++)
    
  4. # 4 楼答案

    看看这个,它似乎有很多问题

    在for循环中,您将字符串初始化为null,然后尝试递增它(x++)。我不认为这是合法的语法。此外,for循环条件设置为size,它最初将等于0。我必须对其进行测试,但0的计算结果可能为false,这意味着循环永远不会执行

    无论如何,您都不需要for循环,可能是一个do-while循环,它会一直运行到命令等于“quit”do{}while(!command.equals("quit"));

    你应该使用。equals()而不是Elliot Frisch提到的“==”。此外,忽略大小写也很好,您应该使用else if

    在change命令中,您应该解析出两个参数——要替换的名称和新名称,然后执行替换。现在,第一个参数是名称。大小,我认为它将超出列表的范围(names.size() - 1应该是最后一个元素)。相反,你应该得到你要替换的名字的索引

    根据ArrayList的Java toString实现,它可能会很好地打印出名称,或者类似于“@ArrayList Object”——我认为Java有一个很好的ArrayList toString方法,所以这可能会起作用

    关于打印量,你应该使用names.size()而不是names.size() - 1(因为names.size() - 1会给你比列表中实际少一个项目)