我有一个初级水平的课程。我的目标是第一次在运行时传递一个参数。
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
答案 0 :(得分:2)
arg
未定义。也许你的意思是sayagain(args[0])
,它将打印main方法中的第一个参数。
args
是字符串数组,因此要获取第一个参数,您需要访问数组中的第一个元素:[0]
。
如果在调用main方法时不包含任何参数,则会出现index out of bounds
错误。
>java sayagain
示例输出:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 0
at sayagain.main(sayagain.java:11)
没有内置功能可以将arg
发现为args
的单数。变量可以是正式语言规范内的任何内容,甚至是asdfsfaeef
。使用描述性名称是更好的做法;因此,人们在命名数组时倾向于使用复数形式。
答案 1 :(得分:1)
看起来像印刷错误。
你已经通过了arg: - 名字中缺少了s,因为你在main方法中收到的参数是args。
sayagain(arg);
但是如果你将'args'传递给你的方法,它仍然会给出一个错误,因为args是一个数组类型,你的函数看起来是一个String类型。所以对该函数的正确调用将是。
sayagain(args[0]);
在调用此函数之前检查args长度,否则如果未传递参数,则可能抛出ArrayIndexOutOfBoundException。
答案 2 :(得分:0)
System.out.print(args[0]);
System.out.print(args);
//错误的类型。System.out.print(args[1]);
//索引错误。System.out.print(arg);
//不是变量。System.out.print(arg[0]);
//拼写错误(见上文)。答案 3 :(得分:0)
在Java中,使用javac sayagain.java
将源代码编译为类文件,然后创建sayagain.class
,这基本上是JVM(Java虚拟机)可以理解和执行的内容。
要运行javac命令生成的sayagain.class
,您将使用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);
}
}
}
希望这会有所帮助:)