Поиск в массиве Java, останавливается после первого экземпляра - PullRequest
0 голосов
/ 12 июня 2018

Быстрый вопрос всем,

В настоящее время я работаю над программой, и я пытаюсь ввести число в GUI, и программа ищет массив, чтобы найти это число, затем выводит следующее числов этом массиве.Я смог завершить это, однако цикл for работает только для первого набора чисел.Я могу ввести 7623, и он заполняет 2000,00, поэтому я знаю, что я на правильном пути.У меня может быть проблема с циклом for, но я почесал голову.Спасибо за всю твою помощь.

private double[][] arrayValues = {
        {7623, 2000.00},
        {7623, 1200.00},
        {8729, 1000.00},
        {8729, 1700.00},
        {7321, 4500.00},
        {3242, 4612.00},
        {3242, 100.00},
        {9823, 234.00},
        {9823, 2345.00},
        {2341, 12373.12},
        {2341, 5421.12},
        {8321, 2314.00},
        {8321, 56233.00}
    };

        private void requestBalanceActionPerformed(java.awt.event.ActionEvent evt) {

        actnum = Double.parseDouble(accountNumber.getText());
        int match = 0;

        for (int i = 0; i < arrayValues.length; i++) {
            double accountNo = arrayValues[i][0];

            initialBalance.setText(", ");

            if (accountNo == actnum) {

                balance = arrayValues[i][1];
                accountIndex = i;
                initialBalance.setText(Double.toString(balance));
                initialBalance.setForeground(Color.BLACK);
                match = 1;
            }

            if (match != 1) {

                initialBalance.setText(Double.toString(0));
                initialBalance.setText("Acct # does not exist. Please try again.");
                initialBalance.setForeground(Color.RED);

///////////////////// НОВЫЙ КОД /////////////

Итак, этот экземпляр кода теперь позволяет мне искать разные числа в массиве, однако мне пришлось убрать initialBalance.setText ("");заставить его работать.Когда я ищу 7623, он теперь выводит 1200,00 вместо 2000,00 и делает это для каждого #, пропуская первый экземпляр числа.Я считаю, что это как-то связано с .setText, который я удалил ??

        private void requestBalanceActionPerformed(java.awt.event.ActionEvent evt) {

        actnum = Double.parseDouble(accountNumber.getText());
        int match = 0;

        for (int i = 0; i < arrayValues.length; i++) {
            double accountNo = arrayValues[i][0];



            if (accountNo == actnum) {

                balance = arrayValues[i][1];
                accountIndex = i;
                initialBalance.setText(Double.toString(balance));
                initialBalance.setForeground(Color.BLACK);
                match = 1;
            }
        }
            if (match != 1) {

                initialBalance.setText(Double.toString(0));
                initialBalance.setText("Acct # does not exist. Please try again.");
                initialBalance.setForeground(Color.RED);

            }

Ответы [ 5 ]

0 голосов
/ 12 июня 2018

Добавить заявление

break;

после

match = 1;
0 голосов
/ 12 июня 2018

Программа оценивает условную if(match != 1) каждую итерацию в цикле for.То, что вы хотите сделать, это сначала выполнить итерацию по всему массиву, а затем проверить свое неравное условие в конце.

Переместите оператор if(match != 1) за пределы цикла for.

edit: эхо того, что говорит другой ответ о сравнении значений типа double с уровнями допуска.

0 голосов
/ 12 июня 2018

Просто зациклите ваш массив в обратном направлении:

public static double findNextValue(double[][] arr, int value) {
    for (int i = arr.length - 1; i >= 0; i--)
        if (Double.compare(arr[i][0], value) == 0)
            return arr[i][1];
    return Double.NaN;
}
0 голосов
/ 12 июня 2018

нужно ли вам использовать double [] [] кажется, что вы могли бы использовать Map, и тогда не требуется «поиск» do values.get (keyValue) // возвращает связанный double.

0 голосов
/ 12 июня 2018

Обычно плохо использовать == для двойников.Вместо этого вы хотите проверить близость в пределах допуска.

...