Есть ли способ разделить JTextField с подстрокой в ​​двойной? - PullRequest
0 голосов
/ 27 апреля 2019

Есть ли способ разделить JTextField, используя подстроки и вернуть его с двойным.Проблема в том, что я получу ввод от пользователя, то есть 3 + x + 5 * 7 + y или 5 * yx / 4 в JTextField, и это будет строка.Но для того, чтобы использовать его в моих вычислениях, я считаю, что он должен быть разбит или разобран в переменную, которая является двойной.

Я считаю, что вы можете взять индекс текста и проверять каждый раз -, +, *, /, x или y появляется и устанавливает подстроки вместе, но я не могу понять, как это можно сделать.

Это будет переменная, которая называется double i и используется в следующем контексте:

public void solve(double y, double h, int j, double i){      
xArray = new double[j];
yArray = new double[j];
for(int dex = 0; dex < j; dex++){
    F1 = h*f(x,y,i);
    F2 = h*f(x+h/2,y+F1/2,i);
    F3 = h*f(x+h/2,y+F2/2,i);
    F4 = h*f(x+h,y+F3,i);

    y = y + 1.0/6.0*(F1+2*F2+2*F3+F4);

    xArray[dex] = x;
    yArray[dex] = y;

    x = x + h;
   }   
 } 
private double f(double x, double y, double i){
 return i; 
} 

1 Ответ

0 голосов
/ 27 апреля 2019

Я полагаю, что вы можете взять индекс текста и проверять каждый раз, когда появляются символы -, +, *, /, x или y, и устанавливать подстроки вместе, но я не могу понять, как это можнобыть сделано

это можно сделать с помощью интерфейса KeyListener, который предоставляет 3 метода, которые могут помочь вам keyPressed, keyReleased и keyTyped, каждый из которых имеет свою функциональность (хотя их именапроверяет их, но время их выполнения очень разное.)

вот пример

public class MyListener implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
            //empty implemntation , we are not using it 
        }

        @Override
        public void keyPressed(KeyEvent e) {
            //here we are implementing what we want for the app
            //using the KeyEvent method getKeyChar() to get the key that activated the event.
            char c = e.getKeyChar();
            //let's check it out !
            System.out.println(c);
            //now we got it we can do what we want 
            if (c == '+'
                    || c == '-'
                    || c == '*'
                    || c == '/') {
                // the rest is your's to handle as your app needs
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            //empty implemntation , we are not using it 
        }

    }

, поэтому, чтобы получить ключ, который нажал пользователь, мы получаем его из KeyEventобъект.

при переходе к составной части мы добавляем его вот так

JTextComponent jtc = //create it whether it's text field , area , etc...
MyListener ml = new MyListener();
jtc.addKeyListener(ml);

остальное зависит от того, как вы собираетесь использовать текст String, и запомните этот ответ, как узнатьчто пользователи только что напечатали (char by char), но в качестве подхода это очень плохо !!представьте, что пользователи решают удалить цифру или изменить местоположение каретки, как бы вы справились с этим ??поэтому, как сказал наш друг @phflack, я бы порекомендовал использовать Regex или String.split как-то так: -

String toSplit = "5-5*5+5";
        String regex = "(?=[-+*/()])";
        String[] splited = toSplit.split(regex);
        for (String s : splited) {
            System.out.print(s + ",");
        }

и выходные данные этого

5,-5,*5,+5,

, но это вряд лиa Regex Я только что показал вам образец для получения дополнительной информации о Regex прочитайте это и для KeyListener вы можете прочитать об этом здесь , и я надеюсь, что это решило вашупроблема.

...