搜索 Java 数组,在第一个实例后停止



快速提问,

我目前正在开发一个程序,我正在尝试将一个数字输入到 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);
}

程序通过for循环评估每次迭代的if(match != 1)条件。您要做的是首先遍历整个数组,然后在最后测试不相等的条件。

if(match != 1)语句移到 for 循环之外。

编辑:呼应其他答案关于将双倍与公差水平进行比较的说法。

在双打上使用 == 通常是不好的做法。 您希望改为检查容差范围内的接近度。

您是否必须使用double[][]似乎您可以使用Map,然后不需要"搜索"来执行values.get(keyValue(//返回关联的double。

Add 语句

break;

match = 1;

只需向后循环数组:

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;
}

最新更新