操纵String类型的arraylist

时间:2014-02-27 19:54:28

标签: java arraylist

我在这里遇到了一个问题,这给我带来了一些真正的麻烦,我甚至无法知道该怎么做。到目前为止,这是作业和我的代码。

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

Enter command or quit:(如果他们进入退出 - 退出计划)

命令

  • add <name>:将字符串<name>添加到ArrayList;
  • change <name> <newName>:更改ArrayList中的所有项目 有<name><newName>;
  • delete <name>:删除Arraylist中<name>;
  • 的所有项目
  • 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 个答案:

答案 0 :(得分: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++)

答案 1 :(得分:2)

看着它,好像它有很多问题......

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

你不需要for循环,可能是一个do-while循环,直到命令等于“quit”do{}while(!command.equals("quit"));

你应该使用.equals()而不是Elliot Frisch提到的'=='。同样忽略大小写是好的,你应该使用其他ifs。

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

根据Java的ArrayList的toString实现,它可以很好地打印出名称,或者它可能类似于“@ArrayList Object” - 我认为Java有一个很好的ArrayList toString方法,但这可能有效。

在打印金额上,您应该使用names.size()而不是names.size() - 1(因为names.size() - 1会比您列表中的实际项目少一个项目)

答案 2 :(得分:0)

您可以尝试使用可以对控制语句进行流处理的切换块。如上所述,了解何时使用==以及何时使用.equals()。一个比较一个引用(==)另一个比较内存位置,重要的是要取消它,是一个String是一个对象,当你创建一个新的String时,它比较地址而不是一个值(原谅我)如果我错了)。

switch(command){
case "add": names.add(assignment);
break;
case "change": ..... etc.

}

答案 3 :(得分:0)

如果我尝试完成此任务,我会使用List,而不是ArrayList。我希望这种方法有所帮助!这是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
            }  
        }
    }