打印命令行中应提供的大小的数组

  • 本文关键字:数组 命令行 打印 java arrays
  • 更新时间 :
  • 英文 :


声明整数值的数组m并创建它(分配内存(。数组的大小应由程序执行过程中命令行中提供的参数定义。

public class A {
    public static void main(String[] args) {
        int[] a;
        int[] b = new int[n];
        for (int i = 0; i < n; i++) {
            b[i] = a[i];
        }
    }
}

这是我的代码,但我认为这是不正确的。我应该在代码中使用变量ARG吗?并请向我解释有关内存分配的更多信息。谢谢。

1(您需要初始化 a[]

2(使用String[] args检索命令行参数(并且您需要将其解析为整数(

尝试这样。

class A {
  public static void main(String[] args) {
    try {
      String nn = args[0];
      int n = Integer.parseInt(nn);
      int[] a = new int[n];
      for (int i = 0; i < n; i++) {
        // your implementation goes here
      }
    }
    catch (ArrayIndexOutOfBoundsException e) {
      System.out.println("Please specify a argument");
    }
    catch (NumberFormatException e) {
      System.out.println("Argument must be a integer value");
    }
  }
}

是的,您应该在代码中使用变量ARG。

分析字符串arg to number:

int firstArg;
if (args.length > 0) {
    try {
        firstArg = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.err.println("Argument" + args[0] + " must be an integer.");
        System.exit(1);
    }
}

参考:https://docs.oracle.com/javase/tutorial/essential/environment/cmdlineargs.html

您确实需要使用args变量。您传递给Java程序的参数存储在JVM中的args变量中,使其可用于程序员。

我假设一个参数(预期的数组大小(传递给程序,这将是args[0]

您需要将此字符串作为int解析,然后将该数字用作数组大小:

// We assume args[0] exists and can be parsed as an integer, or else a
// NumberFormatException will be thrown
int size = Integer.valueOf(args[0]);
// We can use the size variable as array size.
int[] m = new int[size];

现在,数组m具有通过命令行给出的数字的大小。请注意,数组大小在编译时不知道,仅在运行时。创建后无法调整数组大小。可以使用m.length检索其长度。它的值初始化为0

如果要打印数组的每个元素,则可以使用

  • for循环:

    for (int i = 0; i < m.length; i++) { // Loop variables are often called i
        // System.out.println prints its argument to the console
        System.out.println(m[i]);
    }
    
  • 或用于循环的增强(也称为foreach循环(:

    for (int n : m) {
        System.out.pritnln(n);
    }
    
  • 或使用Java流:

    Arrays.stream(m).forEach(System.out::println);
    

    IntStream.of(m).forEach(System.out::println);
    

更多关于内存分配的信息:

  • 了解内存管理
  • JVM的实际记忆分配以及它们如何不同?

尚不清楚,无论您是否需要在Inputstream上或类似的内容,还是可以使用ARGS:

数组的大小应由提供的参数定义 程序执行期间的命令行。

"参数"听起来很像ARG,但是在程序执行之前提供了它们,而不是在。

但是在程序执行期间,我不会将其称为参数,而是一个输入。

由于您不需要任何导入,因此使用ARGS并不那么复杂。

最新更新