【问题标题】:Command line arguments [duplicate]命令行参数 [重复]
【发布时间】:2017-11-09 22:37:08
【问题描述】:

我创建了一个名为 Human 的类,它可以正常工作,它需要 2 个参数,年龄和姓名,才能创建一个人。

要使用命令行参数创建人类,我想写

java 文件名 -H "Anna" 25

它应该使用thatname="Anna"thatage=25 创建一个 Human,其中 25 是一个 int。

我编写的代码是创建一个名为 Argument 的列表,并遍历它以找到 -H。我需要这样做,因为稍后我将使用它来创建不同的类。我只需要有关我写thename=theage= 的行的语法帮助,因为我不知道如何获取next item in listnext-next item in list

public static void main(String[] args) {
    ArrayList<String> Argument = new ArrayList<String>();       

    for (String item: args) {
        Argument.add(item);         
    }

    for (String item2: Argument) {
        if (item2 == "-H") {
            thatname = Argument.get(item2+1)
            thatage = Argument.get(item2+2)
            Human person = new Human(thatname,thatage);
            System.out.println(person);
        }

【问题讨论】:

  • How do I compare Strings in Java? 另外,String和integer相加的结果应该是什么?索引?怎么样?
  • 什么意思?我在哪里添加一个带整数的字符串?我写Argument.get(item2+1) 的部分不是我试图添加一个整数和一个字符串,我知道这是不正确的编码。我只是想在代码中解释我试图找到item2 之后的值。我不知道它的语法。另外,我知道get 对我不起作用,因为get 仅适用于ints。所以我真正要求的是,Argument 中的String 的语法是get 的语法,这在thatname 的第2 项之后,在thatage 之后的语法。

标签: java command-line-arguments


【解决方案1】:

为什么不直接循环 args?

for ( int i = 0; i < args.length; i++ ) }
    if (args[i].equals("-H")) {
       i++;
       thatName = args[i];
       i++;
       thatAge = args[i];
    }
}

如果有人不遵守您设置的规则,您应该添加一些代码来捕获。可能没有足够的参数或人类在键盘上做的其他事情......

【讨论】:

  • 我尝试使用它,但我只是得到一个空输出。 for ( int i = 0; i &lt; args.length; i++ ) { if (args[i].equals("-H")) { i++; String thatName = args[i]; i++; int thatAge = Integer.parseInt(args[i]); Human person = new Human(thatAge,thatName); System.out.println(person); } }
  • 我认为,person 是不可打印的。尝试实现一个 toString() 方法。 public String toString() { return getName() + " " + Integer.toString(getAge()); }
【解决方案2】:
thatname = Argument.get(Argument.indexOf(item2)+1);
thatage = Argument.get(Argument.indexOf(item2)+2);

或者你知道第一个元素是-H,第二个元素是name,第三个是age,所以你可以直接使用下面的代码

thatname = Argument.get(1);
thatage = Integer.parseInt(Argument.get(2));

【讨论】:

    【解决方案3】:

    您的代码有一些问题,让我向您解释一下以寻求帮助。

    1. 您不能将字符串与 == 进行比较,您必须使用 equals 方法 在字符串中比较两个字符串。
    2. 你必须使用这个 for 循环 for(int i = 0; i 语法,以便您可以从零迭代到 列表中的项目。
    3. ArrayList 中的 get 方法将索引作为参数,并返回该索引处的值。
    4. 您可以添加 i += 2 以跳过接下来的两次迭代,这将 返回人类的姓名和年龄值。 (可选)

    这是工作代码:

    public static void main(String[] args) {
    ArrayList<String> Argument = new ArrayList<String>();       
    
    for (String item: args) {
        Argument.add(item);         
    }
    
    String currentItem; 
    for (int i = 0; i < Argument.size(); i++) { // it will iterate through all items
    
        currentItem = Argument.get(i); // getting the value with index;
    
        if (currentItem.equals("-H")) {
    
            String thatname = Argument.get(i+1);
            String thatage = Argument.get(i+2);
    
            i += 2; // Skipping 2 iterations of for loop which have name and age human.
    
            Human person = new Human(thatname,thatage);
            System.out.println(person);
    
            }
    
        }
    }
    

    【讨论】:

      【解决方案4】:

      您不能使用String 迭代列表。迭代列表时,您需要一个索引号,例如 list.get(indexNumber);

      public static void main(String[] args) {
          ArrayList<String> Argument = new ArrayList<String>();       
      
          for (String item: args) {
              Argument.add(item);         
          }
      
          for (int i=0;i<args.length;i++) {
              if (args[i].trim().equals("-H")) {
                  i++;
                  thatname = Argument.get(i);
                  i++;
                  thatage = Argument.get(i);
                  Human person = new Human(thatname,thatage);
                  System.out.println(person.getName()+"  "+person.getAge());
              }
      

      【讨论】:

        【解决方案5】:

        既然可以直接使用 args,为什么还要使用数组列表?当你只有两个参数时,不要使用 for 循环直接访问它们。 您应该知道的一件事是 String 是 java 中的一个对象,因此比较两个带有 == 符号的字符串即使它们具有相同的值也会返回 false(== 将比较对象的 id),您应该使用 .equale() 函数比较对象的值。

        查看此代码:

         public static void main(String[] args) {
                if(args.length>0)
                {
                        try{
                           if (args[0].equals("-H")) {
                            Human person = new Human( args[1],args[2]);
                            System.out.println(person);
                         }
                         }catch(ArrayIndexOutOfBoundsException exception) {
                             System.out.println("error with parameters");
                         }
                 }else
                   System.out.println("No command");
              }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-29
          • 2011-10-05
          • 2012-11-29
          • 1970-01-01
          • 2012-08-15
          • 2020-01-01
          • 2014-02-15
          相关资源
          最近更新 更多