0

示されているように配列リストがあります。

私の要件は、リストが値「M」で構成されている場合、for ループで条件チェック (示されているように等しいチェック) を終了したいが、その for ループでさらに操作を続行したいということです。

これは私のプログラムです

package com;

import java.util.ArrayList;
import java.util.List;

public class Jai {
    public static void main(String args[]) {
        String flag = null;
        ArrayList<String> list = new ArrayList<String>();

        list.add("M");
        list.add("M");
        list.add("M");
        list.add("F");
        list.add("M");
        list.add("M");
        list.add("M");
        list.add("F");

        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals("M")) {
                flag = "M";
            } else {
                flag = "F";
            }
            // this is to indicate that i need to continue further operations
            // inside for loop
            System.out.println("Hi");

        }

        if (flag.equals("M"))
            System.out.println("This is M List");
        else
            System.out.println("This is F List");

    }
}

List は Value M で構成されているので、 M List として扱いたいと思います。

上記のプログラムは単純化のためのもので、実際にはリストには従業員オブジェクトが含まれます。

4

5 に答える 5

2

私の理解が正しければ、リストに「M」が含まれているかどうかをテストしてください。これを行うためのクリーンな方法は、for ループを使用するのではなく、単純に呼び出すことです。

if (list.contains("M"))

ただし、質問に答えるために、次を使用してループから抜け出すことができます

if (list.get(i).equals("M")) {
    flag = "M";
    break;
}

要素が M でない場合にのみ、実際にループ内で何かを実行したい場合は、次のようにします。

for (int i = 0; i < list.size(); i++) {
    if (list.get(i).equals("M")) {
        flag = "M";
    } 
    else {
        flag = "F";
        doSomethingOnlyForNonMElements();
    }
}
于 2013-04-05T11:07:11.293 に答える
1

次の方法で行うことをお勧めします

// Indicates whether the list has M or not
boolean hasM = false;

// Go over the entire list
for (int i = 0; i < list.size(); i++) {
    // Check if we found M within the list, if not, proceed
    // to checking if the current item has M in it.
    if (!hasM && list.get(i).equals("M")) {
        // The current item is M, set hasM to true
        hasM = true;
    }

    // this is to indicate that i need to continue further operations
    // inside for loop
    System.out.println("Hi");
}

ブール値のチェックは、文字列を比較するよりも安価な操作です。if次のように、ループを中断して、そのチェックを除外する別のループを続行する場合を除き、そのループの一部である必要があります。

// Indicates whether the list has M or not
boolean hasM = false;

// Remember the position of iteration
int i;

// Go over the list, until we find M
for (i = 0; i < list.size() && !hasM; i++) {
    // Since this loop will only iterate until M is found,
    // we can remove the check for whether M was found or not
    if (list.get(i).equals("M")) {
        // The current item is M, set hasM to true
        hasM = true;
    }

    // this is to indicate that i need to continue further operations
    // inside for loop
    System.out.println("Hi");
}

// Continue in a different loop. If this loop iterates, it
// will be after M was found.
for (; i < list.size(); i++) {
    // Do stuff after M was found
}

JB Nizet の回答に記載されているように、list.contains("M")反復前にリストに M があるかどうかをテストするために使用できますが、これが反復自体に必要でない限り、メソッドの複雑さが O(n) ではなく O(2n) に不必要に増加します。

于 2013-04-05T11:19:47.197 に答える
0

continue;If条件に追加

if (list.get(i).equals("M")) {
                flag = "M";
                continue;
}
于 2013-04-05T11:06:10.050 に答える