如何在 for 循环中包含大量指令 If? [复制]

Posted

技术标签:

【中文标题】如何在 for 循环中包含大量指令 If? [复制]【英文标题】:How can I include a large number of instruction If in for loops? [duplicate] 【发布时间】:2021-04-27 21:50:46 【问题描述】:

我有一个程序,它返回两个不匹配字符在两个字符串中的相同位置的 ASCII 表的距离。我想缩短我的程序,但是以这样的方式返回与以前相同的结果。(程序不能返回负值,因此它在每个 If 指令中检查哪个数字具有更大的值并且字符串始终具有相同的长度) 现在程序每次比较时都会抛出一个错误:“System.IndexOutOfRangeException: 'Index was outside the bounds of the array.”但它显示正确的结果..

代码

    public static void incompatible(string a, string b)

      
        char[] characters1 = new char[a.Length];
        char[] characters2 = new char[b.Length];

        for (int i = 0; i < a.Length; i++)
        
            characters1 [i] = a[i];

        
        for (int i = 0; i < b.Length; i++)
        
            characters2 [i] = b[i];

        



        if (a.Length >= 0 || b.Length >= 0)
        
            if (characters1 [0] != characters2 [0])
            
                if (characters1 [0] > characters2 [0])
                
                    Console.WriteLine(characters1 [0] - characters2 [0]);
                
                else if (characters1 [0] < characters2 [0])
                
                    Console.WriteLine(characters2 [0] - characters1 [0]);
                
            
        

        if (a.Length >= 1 || b.Length >= 1)
        
            if (characters1 [1] != characters2 [1])
            
                if (characters1 [1] > characters2 [1])
                
                    Console.WriteLine(characters1 [1] - characters2 [1]);
                
                else if (characters1 [1] < characters2 [1])
                
                    Console.WriteLine(characters2 [1] - characters1 [1]);
                
            
        

        if (a.Length >= 2 || b.Length >= 2)
        
            if (characters1 [2] != characters2 [2])
            
                if (characters1 [2] > characters2 [2])
                
                    Console.WriteLine(characters1 [2] - characters2 [2]);
                
                else if (characters1 [2] < characters2 [2])
                
                    Console.WriteLine(characters2 [2] - characters1 [2]);
                
            
        

        if (a.Length >= 3 || b.Length >= 3)
        
            if (characters1 [3] != characters2 [3])
            
                if (characters1 [3] > characters2 [3])
                
                    Console.WriteLine(characters1 [3] - characters2 [3]);
                
                else if (characters1 [3] < characters2 [3])
                
                    Console.WriteLine(characters2 [3] - characters1 [3]);
                
            
        

我现在有 14 个类似上述的 If 指令。

【问题讨论】:

请查看“Math.Abs​​”作为简化代码的第一步 另外,将两个数组的最小长度放入一个变量中,然后遍历该变量的所有索引。检查这些索引.. 顺便说一句,没有“if 循环”之类的东西 【参考方案1】:

1.你不需要使用额外的char数组,你可以使用a[index]b[index]

2.Math.Abs() 将返回正差,所以不要像这样的行:

if (characters1 [2] > characters2 [2])

      Console.WriteLine(characters1 [2] - characters2 [2]);

else if (characters1 [2] < characters2 [2])

      Console.WriteLine(characters2 [2] - characters1 [2]);

你可以这样做:

Console.WriteLine(Math.Abs(characters1 [0] - characters2 [0]));

所以关于循环,你的整个代码可以变成这样:

  public static void incompatible(string a, string b)
  
       for(int i=0; i<Math.Min(a.Length,b.Length);i++)
            if(a[i] != b[i])
                Console.WriteLine(Math.Abs(characters1 [i] - characters2 [i]));
  

【讨论】:

【参考方案2】:

无需将字符复制到characters1characters2 变量中。字符串确实有一个索引器,您可以通过它访问它们的所有字符。

首先得到两个字符串的最小长度。我们只能比较较短字符串的长度。

int length = Math.Min(a.Length, b.Length);

现在使用 for 循环遍历字符

for (int i = 0; i < length; i++) 
    ... more to come

在循环中,您可以使用索引i 比较同一位置的字符。取其字符码差的绝对值。这消除了负面迹象。

int diff = Math.Abs(a[i] - b[i]);

请注意,这是我们唯一一次访问字符。每个都只被访问一次。您的代码最多访问每个 5 次(复制时,比较 !=、>、Writeline 中。

如果差值不为 0,则将结果写入控制台

if (diff != 0) 
    Console.WriteLine(diff);

现在大家在一起

public static void incompatible(string a, string b)

    int length = Math.Min(a.Length, b.Length);
    for (int i = 0; i < length; i++) 
        int diff = Math.Abs(a[i] - b[i]);
        if (diff != 0) 
            Console.WriteLine(diff);
        
    

就是这样!

【讨论】:

以上是关于如何在 for 循环中包含大量指令 If? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQLserver中利用循环语句插入大量的数据

json/js/html 测验:如何将 json 数据解析为 for 循环和 if 语句? [复制]

如何在 for 循环中创建键:值对列表? [复制]

vue3条件语句和循环语句

python如何如此快速地计算某些指令? [复制]

范围大时“for / range”会不会消耗大量内存? [复制]