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

搜索Java数组,在第一个实例后停止,java,arrays,loops,for-loop,arraylist,Java,Arrays,Loops,For Loop,Arraylist,快速提问所有人 我目前正在开发一个程序,我试图在GUI中输入一个数字,让程序搜索一个数组以找到该数字,然后输出该数组中的下一个数字。我能够完成这个,但是for循环只对第一组数字有效。我可以输入7623,它填充了2000 .00,所以我知道我走对了方向。我的for循环可能有问题,但我一直在挠头。谢谢你的帮助 private double[][] arrayValues = { {7623, 2000.00}, {7623, 1200.00}, {87

快速提问所有人

我目前正在开发一个程序,我试图在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);
private double[][]数组值={
{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匹配=0;
for(int i=0;i
/////////////////////新代码/////////////

因此,这个代码实例现在允许我在数组中搜索不同的数字,但是我必须去掉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);

            }
private void requestBalanceActionPerformed(java.awt.event.ActionEvent evt){
actnum=Double.parseDouble(accountNumber.getText());
int匹配=0;
for(int i=0;i
在双精度上使用==通常是一种不好的做法。您需要检查在公差范围内的接近度。

只需向后循环数组:

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

您是否必须使用双精度[]看起来您可以使用映射,然后不需要“搜索”do值。get(keyValue)//返回关联的双精度。

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

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

编辑:重复其他关于将双倍与公差水平进行比较的答案。

添加语句

break;
之后


当您输入7623时,您想要的输出是什么?或者您得到不想要的结果的其他值?2000.00是我想要的输出,但是2000.0也可以工作。因此,当我输入“8729”时,它无法识别它,并直接转到“如果”循环匹配!=1。绕过if acoungno==actnum。我想说这与包含int/double的数组有关?请告诉我您的想法并感谢您的帮助!请提供方法requestBalanceActionPerformed()的完整实现。我注意到它没有正确关闭。if条件match!=1需要在for循环之外。当你只显示了循环的一部分时,很难判断你的循环出了什么问题。你能给我们看一下其余的吗?他在当前数组结构中会有重复的键…更可能需要返回相关的double[]通过值数组的其他一些迭代。错过了dupesBryan,谢谢。我确实忽略了我的闭括号。我现在将if(match!=1)移到for循环之外,现在它允许我搜索大多数数字……但我必须删除“initalBalance.setText(”);现在,当我搜索7623时,它输出的是1200.00而不是前一个2000.00。我相信这与我删除该命令有关。setText命令?我现在将代码放在顶部
match = 1;