【问题标题】:Turn commandline input into an array将命令行输入转换为数组
【发布时间】:2009-04-22 15:41:13
【问题描述】:

我正在进行一项关于如何获取键盘命令行输入并将其放入数组中的 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 + ": ");

我正在尝试从命令提示符读取,但它根本没有提示。当我对 java 文件进行 javac 时,它可以正确编译。

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

【问题讨论】:

  • 你的 readline 方法从何而来?你定义了吗?
  • 此代码是否与生成您的错误的实际匹配。上面的错误表明你没有找到你的主要方法,所以正确定义(它确实出现在上面)
  • @phill:你看到我的第二次编辑了吗?
  • @mmyers 是的,我做到了.. 谢谢.. 它开始提示输入
  • 您仍然需要将最后一个 while 循环中的条件更改为 i

标签: java arrays command-line


【解决方案1】:

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

  1. 您需要在 import 语句中使用分号:

    import java.io.*;
    
  2. 你忘记了一个结束括号:

    } // end main()
    
  3. 没有readline()这样的方法。你需要阅读System.in。最简单的方法是在循环之前创建一个Scanner,然后在循环中读取它。有关示例,请参阅 Scanner 的 Javadocs。

编辑:有关从命令行读取的更多信息,请参阅Java TutorialsConsole class(在 Java 6 中引入)看起来具有您想要的 readLine() 方法。

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

【讨论】:

  • 您所说的javac 是什么? :P
  • 谢谢.. 我对代码进行了更正。我通过 java.io > DataInput > string readline() 方法找到了 readline() 方法.. 我想这是不正确的..
  • 哦,哦...从最后的评论来看,我认为这里有更深层次的问题。
【解决方案2】:

试试

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

然后在你的循环中:

in.readline();

我会将接收到的行推送到 ArrayList 或类似中。这样您就可以接受多于/少于 3 行的数据(但仅当您要接受的行数可变时才需要这样做)

编辑:我最初认为 NoSuchMethod 异常突出了范围界定问题。显然不是,感谢那些指出这一点的人!

【讨论】:

  • 您能否详细说明您是如何在 api 中找到这个的? java.sun.com/javase/6/docs/api 上是否有更简单的搜索功能?有没有比在 api 周围寻找你需要的功能更简单的方法?
  • 啊。经验,恐怕。知道 System.in 是输入流,并且您必须将其包装在阅读器中以转换为字符,然后 BufferedReader 传递行。您可以从搜索“java readline”开始
【解决方案3】:
//print out array
    while ( i < 2 ) { 
        System.out.println(s[i]);
        i++; //increase counter!
    } //end while 

【讨论】:

  • 是的,逻辑错误比语法错误更严重。 (for 循环会更好。)
【解决方案4】:

这可能不是您想要的,但它需要三个命令行参数,将它们存储到一个数组中,然后从新数组中打印出参数:

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

while(i <= 2) {

别忘了增加 i。

【讨论】:

  • 很好。感谢您指出条件语句
猜你喜欢
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2012-09-24
  • 2012-08-27
  • 2017-03-22
  • 2017-07-23
  • 2023-03-25
相关资源
最近更新 更多