0

描述

我有一个初学者级别的程序。我的目标是第一次在运行时传递一个参数。

提出的问题

  • 更详细地描述错误?
  • 如何跟踪和修复此类错误?
  • 我用过谷歌和 StackOverflow。我应该使用不同的资源来帮助解决初学者程序中的此类错误吗?

我的代码

class sayagain {

    public static void sayagain(String s){

        System.out.print(s);

    }

    public static void main(String[] args){

        sayagain(arg);  

    }

}

编译错误

print2.java:11: error: cannot find symbol
                print2(arg);
                       ^
  symbol:   variable arg
  location: class print2
1 error
4

4 回答 4

2

正确的

arg没有定义。也许你的意思是sayagain(args[0]),它将打印 main 方法中的第一个参数。

字符串数组类型和索引的解释

args是一个字符串数组,因此要获取第一个参数,您需要访问数组中的第一个元素:[0].

警告

index out of bounds如果在调用 main 方法时不包含任何参数, 则会出现错误。

  • 示例输入:>java sayagain
  • 示例输出:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at sayagain.main(sayagain.java:11)

可变复数

没有内置函数可以发现argargs. 变量可以是形式语言规范内的任何内容,甚至asdfsfaeef. 使用描述性名称是更好的做法;因此,人们在命名数组时倾向于使用复数形式。

于 2014-05-29T13:24:33.433 回答
1

它看起来像印刷错误。

您已通过 arg :- 名称中缺少 s,因为您在 main 方法中收到的参数是 args。

 sayagain(arg);  

但是,如果您将“args”传递给您的方法,它仍然会给出错误,因为 args 是一个数组类型,而您的函数正在寻找一个字符串类型。所以对该函数的正确调用是。

sayagain(args[0]);  

在调用此函数之前检查 args 长度,否则如果未传递参数,它可能会抛出 ArrayIndexOutOfBoundException。

于 2014-05-29T13:30:53.683 回答
0

我自己的旋转

  • 正确的:System.out.print(args[0]);
  • 不正确:System.out.print(args);//错误的类型。
  • 不正确:System.out.print(args[1]);//错误的索引。
  • 不正确:System.out.print(arg);//不是变量。
  • 不正确:System.out.print(arg[0]);//错字(见上文)。
于 2014-05-29T13:38:12.883 回答
0

在 Java 中,使用 将源代码编译为类文件javac sayagain.java,然后创建一个sayagain.class本质上是 JVM(Java 虚拟机)可以理解和执行的文件。

要运行sayagain.classjavac 命令生成的,您将使用java sayagain

您还可以将参数(以空格分隔)传递给正在运行的类,如下所示:

java sayagain Hello World !

这些参数被传递给您在主类中定义的args 数组,这是首先调用的方法。(您可以将其称为 listOfArguments,如下所示,它不会有任何区别)

要访问数组中包含的任何对象,请使用[]. 数字从 0 开始,以长度 1 结束。这是您的代码的更改示例:

public class sayAgain {

//Eventhough there is two say methods, one takes a String parameter, and one takes an Integer parameter, thus they are different 

public static void say(String s){
    System.out.print(s);
}

public static void say(int i) {
    System.out.print(i);
}

public static void main(String[] listOfArguments){

    //First argument, starting at 0 - Hello
    String arg1 = listOfArguments[0];

    //Second argument - World
    String arg2 = listOfArguments[1];

    //Second argument - 3
    String arg3 = listOfArguments[2];

    //arg3 is a integer but is saved as a String, to use arg3 as a integer, it needs to be parsed
    // Integer, is a class, just like your sayAgain class, and parseInt is a method within that class, like your say method
    int count = Integer.parseInt(arg3);

    //Print each argument 
    say(arg1);
    say(arg2);
    say(arg3);

    //Use the converted argument to, to repeatedly call say, and pass it the current number
    for (int t = 0; t < count; t++) {
        //The variable t is created within the for structure and its scope only spans the area between the { }
        say(t);
    }
}
}

希望这可以帮助 :)

于 2014-05-29T13:58:15.180 回答