ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

二重ループを抜けるやりかたにも色々ありますけどね。。

同僚の人の話。

まあ、普通はラベル付きのbreakを使ってこんな感じ。

public class DoubleLoop1
{
	public static void main(String[] args)
	{
		out_of_loop:
		for(int i=1; i<=10; i++)
		{
			for(int j=1; j<=10; j++)
			{
				System.out.println("i = " + i + ", j = " + j);
				if(i % 3 == 0 && j % 3 == 0)
				{
					break out_of_loop;
				}
			}
		}
	}
}

が、同僚の人はフラグを使ったやりかた

public class DoubleLoop2
{
	public static void main(String[] args)
	{
		boolean doubleLoopBreakFlag = false;
		for(int i=1; i<=10; i++)
		{
			for(int j=1; j<=10; j++)
			{
				System.out.println("i = " + i + ", j = " + j);
				if(i % 3 == 0 && j % 3 == 0)
				{
					doubleLoopBreakFlag = true;
					break;
				}
			}
			if(doubleLoopBreakFlag)
			{
				break;
			}
		}
	}
}

や、例外を使ったやりかた

public class DoubleLoop3
{
	public static void main(String[] args)
	{
		try
		{
			for(int i=1; i<=10; i++)
			{
				for(int j=1; j<=10; j++)
				{
					System.out.println("i = " + i + ", j = " + j);
					if(i % 3 == 0 && j % 3 == 0)
					{
						throw new DoubleLoopBreakException();
					}
				}
			}
		}
		catch(DoubleLoopBreakException e)
		{
		}
	}

	private static class DoubleLoopBreakException extends Exception
	{
	}
}

で、いままでやってきたらしい。
なんで?って聞いたら、goto絶対ダメ派なんだそうな。
ラベル付きbreakはgotoじゃないと思うけど、なかなか納得してくれんかったなあ。