В Java, как я могу получить пользовательский ввод в консоли подобно ругательствам? - PullRequest
0 голосов
/ 05 апреля 2009

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

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

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.

Ответы [ 3 ]

3 голосов
/ 05 апреля 2009

Вы можете использовать класс 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 голос
/ 05 апреля 2009

Я считаю, что jLine может сделать то, что вы ищете. Он лицензирован по BSD, поэтому вы можете свободно использовать его.

С сайта jline:

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

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

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

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

0 голосов
/ 05 апреля 2009

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

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

...