标记和未标记中断,在 C# 或 C++ 中继续

本文关键字:C++ 继续 中断 | 更新日期: 2023-09-27 17:57:08

我在C#方面有很好的经验,但现在我从事java项目,所以我参观了Java功能。我对标记和未标记的中断(它在 JavaScript 中也可用)进行了头发,这是一个非常好的功能,在某些情况下它缩短了使用标记中断的大量时间。

我的问题是,在 C# 或 C++ 中标记中断的最佳替代方案是什么,通过外观我认为我们可以使用 goto 关键字从任何范围出去,但我不喜欢它。我尝试用 Java 编写一段代码,使用标记的 break 在二维数组中搜索数字,这很容易:

public static void SearchInTwoDimArray() 
{
// here i hard coded arr and searchFor variables instead of passing them as a parameter to be easy for understanding only.
    int[][] arr = {
            {1,2,3,4},
            {5,6,7,8},
            {12,50,7,8}
    };
    int searchFor = 50;
    int[] index = {-1,-1};
    out:
    for(int i = 0; i < arr.length; i++)
    {
        for (int j = 0; j < arr[i].length; j++)
        {
            if (arr[i][j] == searchFor)
                {
                index[0] = i;
                index[1] = j;
                break out;
                }
        }
    }
    if (index[0] == -1) System.err.println("Not Found!");
    else System.out.println("Found " + searchFor + " at raw " + index[0] + " column " + index[1] );
}

当我尝试在 C# 中执行此操作时:

  1. 正如我之前所说,可以使用goto
  2. 我使用标志而不是标签:

        public static void SearchInTwoDimArray()
    {
        int[,] arr = {
            {1,2,3,4},
            {5,6,7,8},
            {12,50,7,8}
    };
        int searchFor = 50;
        int[] index = { -1, -1 };
        bool foundIt = false;
        for (int i = 0; i < arr.GetLength(0); i++)
        {
            for (int j = 0; j < arr.GetLength(1); j++)
            {
                if (arr[i, j] == searchFor)
                {
                    index[0] = i;
                    index[1] = j;
                    foundIt = true;
                    break;
                }
            }
            if(foundIt) break;
        }
        if (index[0] == -1) Console.WriteLine("Not Found");
        else Console.WriteLine("Found " + searchFor + " at raw " + index[0] + " column " + index[1]);
    }
    

那么这是唯一有效的方法,还是 C# 中有一个已知的替代方法,C++标记的中断或标记的继续?

标记和未标记中断,在 C# 或 C++ 中继续

除了 goto 之外,最好只是重组你的 C# 逻辑,比如

public static String SearchInTwoDimArray()
{
    int[,] arr = {
        {1,2,3,4},
        {5,6,7,8},
        {12,50,7,8} };
    int searchFor = 50;
    int[] index = { -1, -1 };
    for (int i = 0; i < arr.GetLength(0); i++)
    {
        for (int j = 0; j < arr.GetLength(1); j++)
        {
            if (arr[i, j] == searchFor)
            {
                 index[0] = i;
                 index[1] = j;
                 return("Found " + searchFor + " at raw " + index[0] + " column " + index[1]);
            }
        }
    }
    return("Not Found");
    // Console.ReadLine();  // put this line outside of the function call
}