我正在研究如何使用键盘命令行输入并将其放入数组中的Bruce Eckel练习。它应该采用3个独立的输入并将它们放入一个数组并打印出来。
这是我到目前为止的代码:
//: object/PushtoArray
import java.io.*;
import java.util.*;
class PushtoArray {
public static void main(String[] args) {
String[] s = new String[3];
int i = 0;
//initialize console
Console c = System.console();
while ( i <= 2 ) {
//prompt entry:
//System.out.println("Enter entry #" + i + ": ");
//readin
s[i] = c.readLine("enter entry #" + i + ": ");
//increment counter
i++;
} //end while
//reset counter
i = 0;
//print out array
while ( i <= 2 ) {
System.out.println(s[i]);
i++;
} //end while
}//end main
} //end class
更新:现在我收到了另一个错误:
PushtoArray.java:15: readline(boolean) in java.io.Console cannot be applied to (java.lang.string)
s[i]= c.readline("Enter entry #" + i + ": ");
我正在尝试从命令提示符读入,但它根本没有提示。当我javac java文件时它正确编译。
我使用了错误的功能吗?我应该使用推送方法而不是分配吗?
答案 0 :(得分:4)
您确定在正确的文件上运行javac
吗?该文件无法编译。
您需要在import语句中使用分号:
import java.io.*;
你忘记了一个结束支柱:
} // end main()
没有readline()
这样的方法。您需要阅读System.in
。最简单的方法是在循环之前创建Scanner
,然后在循环中读取它。有关示例,请参阅Javadocs Scanner
。
修改:有关从命令行读取的详细信息,请参阅Java Tutorials。 Console
class(在Java 6中引入)看起来像是你想要的readLine()
方法。
编辑2:您需要将Line大写。你写了“readline
”,但它应该是“readLine
”。
答案 1 :(得分:1)
尝试
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
然后在你的循环中:
in.readline();
我会将接收的行推送到ArrayList或类似的。这样你就可以接受更多/少于3行的数据(但只有当你想接受的行数是可变的时才需要这样做)
编辑:我原本认为NoSuchMethod异常突出了一个范围问题。显然不是,而且那些指出来的人也是如此!
答案 2 :(得分:1)
//print out array
while ( i < 2 ) {
System.out.println(s[i]);
i++; //increase counter!
} //end while
答案 3 :(得分:1)
这可能不是你想要的,但它需要三个命令行参数,将它们存储到一个数组中,然后打印出来自新数组的参数:
public class CommandArray {
public static void main (String[] args){
//Set up array to hold command line values
String[] arr = new String[3];
//Copy command line values into new array
for(int i = 0;i < 3;i++)
arr[i] = args[i];
//Print command line values from new array
for(int j = 0; j < 3; j++)
System.out.print(arr[j] + " ");
//Extra line for terminal
System.out.println();
}
}
然后,在使用javac CommandArray.java
编译代码后,您可以使用java CommandArray Arg1 Arg2 Arg3
执行代码。
另外,我注意到,在最后的while循环中,你有:
while(i < 2) {
如果命令行接受3个参数,则只打印2.打印的数组索引将为0和1,因为1&lt;你可以改成它来说:
while(i <= 2) {
不要忘记增加我。