java: if 语句跳过下面的 if 语句

Posted

技术标签:

【中文标题】java: if 语句跳过下面的 if 语句【英文标题】:java: if statement which skips the following if statement 【发布时间】:2016-08-16 11:31:40 【问题描述】:

我有一个二维字符串数组,我将逐行查找最小值。当我找到最小值时,我将找到的最小值的行添加到 ArrayList 以在下一次迭代中跳过该行以找到数组的第二小数。我这样做直到每个行号都是 ArrayList 的一部分。

到目前为止查看我的代码:

List assignedRow = new ArrayList();    
for(int t = 0; t < excelMatrix.length-1; t++)    
double lowest = Double.parseDouble(excelMatrix[0][1]);
    int row = 0, column = 0;    

    for(int r = 0; r < excelMatrix.length-1; r++)                      
        if(assignedRow.contains(r) == true) continue;               
        for(int c = 1; c < excelMatrix[r].length; c++)             
            double value = Double.parseDouble(excelMatrix[r][c]);
            if(lowest > value) 
                lowest = value;
                row = r;    
                column = c; 
               
           
     
    assignedRow.add(row);

到目前为止,代码运行良好,直到最小值出现在第 0 行。之后它总是执行继续条件。

我现在正在寻找可以让我回到 for 循环的东西,使用不属于 ArrayList 的下一个更高的 r。

我希望我把我的问题说清楚了。

【问题讨论】:

只是一个旁注(这不是问题):if(assignedRow.contains(r) == true) 只是写if(assignedRow.contains(r)) 的一段很长的路。 contains已经返回一个boolean,你不需要使用== true来获得一个。我的意思是,你停在哪里? if((assignedRow.contains(r) == true) == true) ? if(((assignedRow.contains(r) == true) == true) == true) ? ;-) 恐怕我不太明白你想做什么。 if(assignedRow.contains(r) == true) 只会跳过那些已经有最小值的行。如果最小值和第二个最小值在同一行中,则会出现问题 @T.J.Crowder 他想在2D 数组中找到最小值,然后是第二小的数字,依此类推,但忽略了他已经找到的行(这就是我从中得到的这个问题) @T.J.Crowder 问题是,如果最小值在第 0 行,则 0 在 ArrayList 内部,因此不会执行 for 循环的其余部分。我总是需要知道一行的最小值,这一行中的其余值是无关紧要的,这就是我跳过它们的原因。但是如果例如第一个最小值在第 0 行,我无法在数组中找到任何其他最小值,因为它总是执行“继续”。 【参考方案1】:

我希望这会奏效。

  List assignedRow = new ArrayList();
    double lowest = 0;
    while (assignedRow.size() < excelMatrix.length) 

        // find intial lowest value from non assign row to compare
        for (int t = 0; t < excelMatrix.length - 1; t++) 
            if (!assignedRow.contains(t)) 
                lowest = Double.parseDouble(excelMatrix[t][0]);
                break;
            
        

        int row = 0, column = 0;
        for (int r = 0; r < excelMatrix.length - 1; r++) 
            if (assignedRow.contains(r)) continue;
            for (int c = 0; c < excelMatrix[r].length; c++) 
                double value = Double.parseDouble(excelMatrix[r][c]);
                if (lowest > value) 
                    lowest = value;
                    row = r;
                    column = c;
                
            
        
        assignedRow.add(row);
    

如果最低值存储在任何行的第一列,您的代码将不起作用,因为您从列索引 1 开始迭代(第三个 for 循环 int c=1lowest = Double.parseDouble(excelMatrix[0][1]

【讨论】:

以上是关于java: if 语句跳过下面的 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

if 判断

JavaScript continue语句有啥用?

向存储过程添加 IF ...ELSE 语句以跳过重复的主键

学懂Java流程控制语句

Java 控制语句

Java 基本语法----流程控制