【问题标题】:how to add user input to 2d array in C#如何在 C# 中将用户输入添加到二维数组
【发布时间】:2021-08-02 23:49:55
【问题描述】:

我正在尝试编写一个小程序来计算来自用户的两个向量的相加并将其存储在数组中。 我想从用户那里得到两个 X 和 Y(比如 {x,y}),然后将它们加在一起。

我尝试像这样使用二维数组

int[,] array = new int[0, 1] {};

但我希望用户输入它的值。 我对 c# 的了解不够,所以如果有人知道我该如何解决这个问题,我会向你求助

【问题讨论】:

    标签: c# arrays vector multidimensional-array


    【解决方案1】:

    如果你想从用户那里得到一个向量,你可以尝试让用户提供它的组件,用一些分隔符分隔,例如

      private static int[] ReadVector(string title) {
        while (true) { // keep asking user until valid input is provided
          if (!string.IsNullOrEmpty(title))
            Console.WriteLine(title);
    
          string[] items = Console
            .ReadLine()
            .Split(new char[] { ' ', '\t', ';', ',' }, 
                   StringSplitOptions.RemoveEmptyEntries);
    
          if (items.Length <= 0) {
            Console.WriteLine("You should provide at least one component");
    
            continue; 
          } 
    
          bool failed = false; 
          int[] result = new int[items.Length];
    
          for (int i = 0; i < items.Length; ++i) {
            if (int.TryParse(items[i], out int value))
              result[i] = value;
            else {
              Console.WriteLine($"Syntax error in {i + 1} term");
              failed = true;
    
              break;
            }  
          }
    
          if (!failed)
            return result; 
        }
      }
    

    然后你可以像这样使用这个例程:

      // We don't want any 2D matrices here, just 2 vectors to sum
      int[] A = ReadVector("Please, enter vector A");
      int[] B = ReadVector("Please, enter vector B");  
    
      if (A.Length != B.Length) 
        Console.WriteLine("Vectors A and B have diffrent size");
      else {
        // A pinch of Linq to compute C = A + B 
        int[] C = A.Zip(B, (a, b) => a + b).ToArray();
    
        Console.WriteLine($"[{string.Join(", ", A)}] + ");
        Console.WriteLine($"[{string.Join(", ", B)}] = ");
        Console.WriteLine($"[{string.Join(", ", C)}]");  
      }  
    

    编辑:当然,您可以借助古老的 for 循环而不是 Linq 来对向量求和:

       int[] C = new int[A.Length];
    
       for (int i = 0; i < A.Length; ++i)
         C[i] = A[i] + B[i]; 
    

    【讨论】:

    • большое спасибо,这正是我想要的并且完美运行,但仍然不太了解整个代码,所以我会尝试一遍又一遍地完成它。
    • 还有一个问题,除了使用Linq之外,还有其他方法可以做最后的计算吗?
    • @Rasta Mosi:当然,您可以使用旧的for 循环来对相应的组件求和
    • C[0]=A[0]+B[0]; C[1]=A[1]+B[1]; 或者你可以使用for(int i=0;i&lt;2;i++)C[i]=A[i]+B[i];