【问题标题】:Java args Incompatible typesJava args 不兼容的类型
【发布时间】:2015-09-25 14:28:52
【问题描述】:

对不起,我是 Java 菜鸟。知道为什么我的代码无法编译吗? 我希望它能够工作,以便我可以在命令行输入两个数组,并让它们被“findNa”方法使用。如果数组中的元素匹配,我希望将 NA 打印在新行上,如果不匹配,我希望打印“array”中的原始值。 提前致谢!

  class naFam {
    static void findNa(String[] array, String[] lookupArray) {
        int i;
        int j;
        for (i = 0; i < array.length; i++) {
            for (j = 0; j < lookupArray.length; j++) {
                if (array[i] == lookupArray[j]) {
                    System.out.println("NA");
                } else {
                    System.out.println(array[i]);
                }
            }
        }
    }
    public static void main(String args[]) {
        String[] array = args[0];
        String[] lookupArray = args[1];
        findNa(array, lookupArray);

    }
}

【问题讨论】:

  • args[0]String 而不是 String[](字符串数组)。 args[1] 也是如此
  • 供将来参考,当您的代码无法编译时,它会说明原因并指向代码中的该位置。如果这不能帮助您找出错误,请至少在您的问题中发布原因和位置,以便我们为您提供帮助。
  • 谢谢。好的,但是我的方法“findNa”需要一个数组。无论如何要从命令行输入一个数组?

标签: java arrays


【解决方案1】:

你可以这样做:

String [] array = new String []{args[0]};
String [] lookupArray = new String [] {args[1]};

但我仍然没有你想要的,而是一个对象的两个数组。您必须详细说明如何将此数组作为参数传递。

您可以将数组的大小作为参数传递,并构造数组,例如:

class naFam {
    static void findNa(String[] array, String[] lookupArray) {
        boolean na = false;
        for (int i = 0; i < array.length; i++) {
            if (!na) {
                for (int j = 0; j < lookupArray.length; j++) {
                    if (array[i] == lookupArray[j]) {
                        System.out.println("NA");
                        na = true;
                    }
                } 
            }
        }
        if (!na) {
            print(array);
        }

    }

    private static void print(String[] array) {
        for (String s : array) {
            System.out.println(s);
        }
    }

    public static void main(String args[]) {
        //simulate user argument pass
        args = new String[]{"2", "3", "x", "x", "y", "y", "x"};
        int arraySize = Integer.valueOf(args[0]);
        int lookupArraySize = Integer.valueOf(args[1]);

        final int parametersSize = 2;
        String[] array = buildUp(args, parametersSize, arraySize);
        String[] lookupArray = buildUp(args, parametersSize + arraySize, lookupArraySize);

        findNa(array, lookupArray);
    }

    private static String[] buildUp(String[] args, int startPosition, int arraySize) {
        String[] newArray = new String[arraySize];
        int x = 0;
        for (int i = startPosition; i < startPosition + arraySize; i++) {
            newArray[x++] = args[i];
        }
        return newArray;
    }

}

【讨论】:

  • 好的,程序的目标是从数组“array”的第一个索引开始。然后,将其与数组“lookupArray”中的每个索引进行比较。如果匹配,则打印 NA。如果没有匹配,则应打印“array”的当前索引。
【解决方案2】:
String[] array = args[0];

您将数组设置为等于字符串(args[0] 返回数组中索引为 0 的String)。

这里也一样:

String[] lookupArray = args[1];

如果您想输入 2 个数组,然后检查它们是否相等,请尝试以下操作:

import java.util.Scanner;

class naFam {
    static void findNa(String[] array, String[] lookupArray) {
        boolean equal = true;
        for (int i = 0; i < array.length; i++) {
            if (array[i]!=lookupArray[i]) {
                equal=false;
            }
        }
        if (equal==true) {
             System.out.println("NA");
        } else {
            System.out.println(array[0]);
        }
    }

    public static void main(String[] args) {
        //Create a new scanner
        Scanner scan = new Scanner(System.in);
        //Create the integer for the size of the array they want to input
        int size1;
        //Input the size
        size1 = scan.nextInt();
        //Create and input the arrays
        String[] arrayOne = new String[size1];
        String[] arrayTwo = new String[size1];

        for (int i = 0; i < size1; i++) {
            arrayOne[i] = scan.next();
        }
        for (int i = 0; i < size1; i++) {
            arrayTwo[i] = scan.next();
        }
        findNa(arrayOne,arrayTwo);
    }
}

尚未测试,但应该可以。

【讨论】:

    【解决方案3】:

    编译器对你大喊大叫,因为你试图将一个字符串转换为一个字符串数组。

    args 是您从命令行传入 main 的字符串数组。当您调用args[0] 时,您正在访问该数组中的第一个字符串。您不能将 String 分配给 String[]。

    听起来您需要让程序要求用户输入数组。看看这样的东西: How to use readline() method in Java?

    【讨论】:

      【解决方案4】:

      您正在尝试将 String 分配给 String[]

      String[] array = args[0];
      String[] lookupArray = args[1];
      

      【讨论】:

      • @StevenLang :不太确定你想在代码中做什么。但我只能理解您的方法需要 String[] ,而您正在传递 String.您的方法设计和您要编写的逻辑似乎存在问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      相关资源
      最近更新 更多