在Java中,如何以类似curses的方式在控制台中获取用户输入?

时间:2009-04-05 03:13:31

标签: java syntax formatting input console

我刚刚开始在学校学习Java for cse142,但我已经知道了一些编程,所以我已经远远超过了课程并且一直在尝试我自己的小项目。通常情况下,如果我遇到问题,我只是解决它,因为我认为我还没有学到这一点,但这个问题足以让我做出一个完整的线索。

我想在控制台生成以下输入/输出。

Window size? (x, y) : 250, 200

250/200将是用户输入,因此,例如,首先你看到

Window size? (x, y) : 

然后输入“250”然后按Enter键,然后你会看到

Window size? (x, y) : 250, 

输入“200”并点击后输入

Window size? (x, y) : 250, 200

然后继续该程序。

作为第二个问题,我想知道是否可以让用户输入方程式。我正在考虑将它们键入的内容存储到字符串中,但这只是文本,需要转换为Java可运行的等式。

3 个答案:

答案 0 :(得分:3)

您可以使用Scanner类从用户那里获取输入,如下所示:

import java.util.Scanner;

public class test
{
    public static void main (String args[])
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Window size? (x, y) : ");
        int xValue = input.nextInt();
        System.out.print("\nWindow size? (x, y) : " + xValue + " , ");
        int yValue = input.nextInt();
        System.out.print("\nWindow size? (x, y) : " + xValue + " , " + yValue);
    }
}

有关扫描仪的更多信息:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html

答案 1 :(得分:1)

我相信jLine可以做你想要的。它是BSD许可的,所以你可以很自由地使用它。

来自jline网站:

  

它在功能上与BSD editline和GNU readline类似。熟悉现代shell(例如bash和tcsh)的readline / editline功能的人会发现JLine的大多数命令编辑功能都很熟悉。

至于问题的第二部分(用户输入的公式),请查看beanshell。为了您的目的,它就像:

一样简单
bsh.Interpreter i = new bsh.Interpreter();
String formula = "2 * 2;"
Object result = i.eval(formula);

您可以使用beanshell进行更多批次;公式本质上可以是Java代码,您可以将所需的任何对象放入解释器的“上下文”中,以便被评估的脚本进行访问。

答案 2 :(得分:0)

不幸的是,对于你在Java中尝试做的事情没有任何支持。您可以通过System.out打印“窗口大小?(x,y):”,并通过BufferedReader / System.in读取文本,但是由于用户输入,您无法控制控制台中显示的内容。如果您需要这种行为,请尝试查找CURSES库;我个人不能推荐。

至于评估方程式,您可以解析您读入的字符串(查看构建某种抽象语法树)。您还可以使用该字符串构造.java文件,并通过Process类调用javac和java来编译和运行它,通过Process.getInputStream()读取结果;这是一个非常讨厌的解决方案,但会接受所有一行java语句。这样的解决方案基于正在安装的JDK,仅JRE不提供javac。