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

在Java中,如何以类似诅咒的方式在控制台中获取用户输入?,java,syntax,formatting,input,console,Java,Syntax,Formatting,Input,Console,我刚在学校开始学习cse142的Java,但我知道一点编程知识,所以我在班上遥遥领先,一直在尝试我自己的小项目。通常,如果我遇到一个问题,我只是解决它,因为我想我只是还没有学会,但这一个让我感到足够的困扰,使整个线程关于它 我想在控制台生成以下输入/输出 Window size? (x, y) : 250, 200 250/200将是用户输入,因此,例如,首先您会看到 Window size? (x, y) : 然后你输入“250”,按回车键,你就会看到 Window size? (x,

我刚在学校开始学习cse142的Java,但我知道一点编程知识,所以我在班上遥遥领先,一直在尝试我自己的小项目。通常,如果我遇到一个问题,我只是解决它,因为我想我只是还没有学会,但这一个让我感到足够的困扰,使整个线程关于它

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

Window size? (x, y) : 250, 200
250/200将是用户输入,因此,例如,首先您会看到

Window size? (x, y) : 
然后你输入“250”,按回车键,你就会看到

Window size? (x, y) : 250, 
在输入“200”并按enter键后,您将获得

Window size? (x, y) : 250, 200
然后继续这个节目


作为第二个问题,我想知道是否有可能让用户输入一个等式。我曾考虑将他们键入的内容存储到字符串中,但那只是文本,需要转换为Java可运行公式。

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


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

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


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

您可以使用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);
    }
}

有关扫描仪的更多信息,请参见此处:

您可以使用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);
    }
}
更多关于扫描仪的信息:

我相信它可以满足您的需求。它是BSD授权的,所以你可以自由使用它

从jline站点:

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

至于问题的第二部分(用户输入的方程式),请看。出于您的目的,它非常简单:

bsh.Interpreter i = new bsh.Interpreter();
String formula = "2 * 2;"
Object result = i.eval(formula);
你可以用beanshell做更多的事情;该公式基本上可以是Java代码,您可以将任何想要的对象放入解释器的“上下文”中,以便被评估的脚本访问。

我相信这可以满足您的需要。它是BSD授权的,所以你可以自由使用它

从jline站点:

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

至于问题的第二部分(用户输入的方程式),请看。出于您的目的,它非常简单:

bsh.Interpreter i = new bsh.Interpreter();
String formula = "2 * 2;"
Object result = i.eval(formula);
你可以用beanshell做更多的事情;公式本质上可以是Java代码,您可以将任何想要的对象放入解释器的“上下文”中,以便被评估的脚本访问