Reading standard input via command line java
我正在学习Sedgwick(普林斯顿大学)的Algorithms 1课程,并尝试从标准输入中读取一个整数,该整数表示将要输入的整数对的数量,然后是来自标准输入的整数对的列表。
例如:
1 2 3 4 5 6 7 | 3 //first integer represents number of pairs 12 34 //list of integer pairs 23 56 34 78 |
我希望输入:
1 | java myProg 3 12 34 23 56 34 78 |
在Windows命令行的命令提示符处,先读取3,然后循环并依次处理每对。
视频中给出的代码是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package getArgs; public class getInput { public static void main(String[] args) { int N = StdIn.readInt(); //read first integer while (!Stdin.isEmpty()){ // loop through pairs int p = StdIn.readInt(); int q = StdIn.readInt(); //process p and q //process each pair } } |
题:
代码中的Stdin.readInt()是实际的Java还是伪代码?
如果不是伪代码,是否需要导入库以访问StdIn?
如果它是伪代码,是否可以使用Scanner类替换StdIn.readInt()?
该程序的其余部分都可以正常工作,也就是联合查找类算法,该驱动程序无法很好地解释该程序,使我感到困惑。
这是我修改过的尝试-很难看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class getInput { public static void main(String[] args) { int i = 0; //counter; int N = 0; N = Integer.parseInt(args[0]); //Read first Integer System.out.println(N ); //check it works i = i + 1; while ( i < N * 2 ){ int p = Integer.parseInt(args[i]); //get first of the next pair i=i + 1; int q = Integer.parseInt(args[i]); //get second of the next pair System.out.println(p +" " + q ); //check } } |
这可以工作,但比StdIn丑陋-有人可以使用StdIn重写它,以便Java识别StdIn吗?
好的,我可以使用它,士力架的评论是正确的。 StdIn类由Sedgewick编写,并在他的早期著作中发表。我只创建了StdIn和StdOut类,然后将代码从互联网复制到空的类文件中,然后就可以了。总而言之,这是由教授创建的类,用于简化从命令行的阅读。
(通过@ snickers10m做的研究!)
代码中的Stdin.readInt()是实际的Java还是伪代码?
实际的Java代码。从文档Stdin.readInt执行此操作:
Reads the next token from standard input, parses it as an integer, and
returns the integer.
如果不是伪代码,是否需要导入库以访问StdIn?
取决于
(编辑:谷歌搜索更多,找到http://introcs.cs.princeton.edu/java/15inout/)
从文档:
To use these libraries, download StdIn.java, StdOut.java,
StdDraw.java, and StdAudio.java into the same directory as your
program.
如果它是伪代码,是否可以使用Scanner类替换StdIn.readInt()?
不适用,因为它是实际代码
使您的代码与StdIn一起使用
(在对问题进行编辑之后。)
您应该将程序从软件包中移出,与StdIn移到同一软件包中
让我们通过调用
1 2 3 4 5 6 7 8 9 |
这与Pshemo已经发表的评论有关。
为学生提供标准(标准图书馆)
它不是"已安装的Java库"的一部分,因此您可以下载Std库并在路径中声明它,然后它可以工作
代码中的Stdin.readInt()是实际的Java还是伪代码?
那是伪代码。 Stdin不是JRE的Java类。
如果它是伪代码,是否可以使用Scanner类替换StdIn.readInt()?
使用System的InputStream会更好。这是一个简单的实现示例:
1 2 3 4 5 6 7 8 9 10 11 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter String"); String s = br.readLine(); System.out.print("Enter Integer:"); try{ int i = Integer.parseInt(br.readLine()); // ... } catch(NumberFormatException nfe){ nfe.printStackTrace(); System.exit(-1); } |
在此处查看此链接,该链接表明Stdin实际上是Scanner的包装器类。如果有它,则可以使用它,否则,请使用Scanner。如果没有它,只需从该链接中获取它,并将其编译为应用程序的一部分。
但是,如果以args []的形式发送它们,则不需要任何内容??,在其中可以将字符串值引用为args1,args [2] ...等。