В Java, как я могу получить пользовательский ввод в консоли в стиле curses?

Я только начал изучать Java в школе для cse142, но я немного знаком с программированием, поэтому значительно опережаю класс и пробую свои собственные небольшие проекты. Обычно, если я сталкиваюсь с проблемой, я просто обхожу ее, потому что я полагаю, что просто еще не научился этому, но эта проблема меня достала, чтобы создать целую ветку об этом.

Я хочу сгенерировать следующий ввод/вывод на консоли.

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

250/200 будет вводиться пользователем, поэтому, например, сначала вы видите

Window size? (x, y) : 

и вы набираете "250" и нажимаете Enter, а затем вы видите

Window size? (x, y) : 250, 

и после ввода "200" и нажатия Enter вы получаете

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

а затем он продолжает работу с программой.

В качестве второго вопроса мне интересно, возможно ли, чтобы пользователь вводил уравнение. Я думал о том, чтобы сохранить то, что они печатают, в строку, но это был бы просто текст, и его нужно было бы перенести в исполняемое уравнение Java.


person Community    schedule 05.04.2009    source источник


Ответы (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

person Josh Leitzel    schedule 05.04.2009

Я считаю, что jLine может сделать то, что вы ищете. Это BSD-лицензия, так что вы совершенно свободны в том, как вы можете ее использовать.

С сайта jline:

По функциональности он похож на строку редактирования BSD и строку чтения GNU. Людям, знакомым с возможностями readline/editline для современных оболочек (таких как bash и tcsh), большинство функций редактирования команд JLine покажется знакомыми.

Что касается второй части вашего вопроса (уравнения, введенные пользователем), взгляните на beanshell. Для ваших целей это так же просто, как:

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

Вы можете сделать намного больше, чем с beanshell; формула может по существу быть кодом Java, и вы можете поместить любые объекты, которые хотите, в «контекст» интерпретатора для доступа к оцениваемому сценарию.

person Marty Lamb    schedule 05.04.2009

К сожалению, нет никакой поддержки того, что вы пытаетесь сделать только на Java. Вы можете напечатать «Размер окна? (x, y):» через System.out и прочитать текст через BufferedReader/System.in, но у вас нет никакого контроля над тем, что появляется в консоли в результате пользовательского ввода. Если вам нужно такое поведение, попробуйте найти библиотеку CURSES; Я не могу порекомендовать ни одного лично.

Что касается оценки уравнения, вы можете либо проанализировать строку, которую вы читаете (посмотрите на создание какого-то абстрактного синтаксического дерева). Вы также можете использовать строку для создания файла .java, а затем скомпилировать и запустить его, вызвав javac и java через класс Process, считывая результат через Process.getInputStream(); что является довольно неприятным решением, но будет принимать все однострочные операторы Java. Такое решение основано на установленном JDK, JRE сама по себе не предоставляет javac.

person Kevin Montrose    schedule 05.04.2009