Java 将命令行输入转换为数组

Java 将命令行输入转换为数组,java,arrays,command-line,Java,Arrays,Command Line,我正在做一个Bruce Eckel练习,学习如何获取键盘命令行输入并将其放入数组。它应该获得3个独立的输入,并将它们放入一个数组中,然后将它们打印出来 以下是我目前掌握的代码: //: object/PushtoArray import java.io.*; import java.util.*; class PushtoArray { public static void main(String[] args) { String[] s = new String[3];

我正在做一个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
我试图从命令提示符中读取,但它根本没有提示。当我对java文件进行javac时,它可以正确编译


我是否使用了错误的函数?我应该使用推送方法而不是赋值吗?

您确定在正确的文件上运行了
javac
?该文件无法编译

  • 在import语句上需要分号:

    import java.io.*;
    
  • 您忘记了一个末端支架:

    } // end main()
    
  • 没有像
    readline()
    这样的方法。您需要从系统中读取。最简单的方法是在循环之前制作一个
    扫描仪
    ,然后在循环中读取。有关示例,请参见Javadocs

  • 编辑:有关从命令行读取的详细信息,请参阅。(在Java6中引入的)看起来像是您想要的
    readLine()
    方法

    编辑2:您需要将行大写。你写了“
    readline
    ”,但应该是“
    readline

    试试看

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    
    然后在你的循环中:

    in.readline();
    
    我会将收到的行推送到ArrayList或类似的列表中。这样,您可以接受多于/少于3行的数据(但只有在要接受的行数可变时才需要)

    编辑:我原以为NoSuchMethod异常突出了一个范围问题。显然不是,thx给那些指出这一点的人

    //打印输出数组
    
    //print out array
        while ( i < 2 ) { 
            System.out.println(s[i]);
            i++; //increase counter!
        } //end while 
    
    而(i<2){ 系统输出打印项数(s[i]); i++;//增加计数器! }//结束时
    这可能不是您想要的,但它需要三个命令行参数,将它们存储到一个数组中,然后从新数组中打印出参数:

    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();
        }
    }
    
    如果命令行接受3个参数,则只打印2个。打印的数组索引将是0和1,因为1小于2。您可以将其更改为:

    while(i <= 2) {
    

    while(你的readline方法从哪里来?你定义了它吗?这段代码是否与产生错误的代码相匹配。上面的错误表明你没有找到你的main方法,因此正确定义了它(它确实出现在上面)@phill:你看到我的第二次编辑了吗?@mmyers是的,我看到了..谢谢..这让它开始提示输入你仍然需要更改上次while循环中的条件到我你说的是什么
    javac
    通过java.io>DataInput>string readline()方法。我想这是不正确的。哦,哦…从最后的评论来看,我认为这里有更深层次的问题。是的,逻辑错误比语法错误更糟糕。(for循环会更好。)你能详细说明一下你是如何在api中找到这个的吗?有没有一个更简单的搜索功能?有没有比在api中找到你需要的功能更简单的方法?啊,恐怕是经验。知道System.in是输入流,你必须将它包装在读卡器中才能转换为字符,然后BufferedReader交付您可以从搜索“java readline”开始,这是一个很好的捕获。感谢您指出条件语句
    while(i < 2) {
    
    while(i <= 2) {