【问题标题】:C#: store and write coordinates in a QueueC#:在队列中存储和写入坐标
【发布时间】:2021-12-31 00:33:04
【问题描述】:

我正在学习 C#。 我想将 x,y 坐标存储在队列中。因此我创建了一个数组。但是我写不出来。谁能帮助我并告诉我我做错了什么?

非常感谢!

public static void Main()
    {
        Random rnd = new Random();
        Queue<int[]> myQ = new Queue<int[]>();
        int plX = rnd.Next(0, 10);
        int plY = rnd.Next(0, 10);
        int[] arr1 = new int[] {plX, plY};
        int[] arr2 = new int[] {plX, plY};
        int[] arr3 = new int[] {plX, plY};
        int[] arr4 = new int[] {plX, plY};
        
        myQ.Enqueue(arr1);
        myQ.Enqueue(arr2);
        myQ.Enqueue(arr3);
        myQ.Enqueue(arr4);

        foreach (int[] point in myQ)
        {
            WriteLine(point);
        }
    }

【问题讨论】:

    标签: c# arrays write


    【解决方案1】:

    将您的 foreach 循环替换为

    foreach (var point in myQ)
    {
        Console.WriteLine(point[0]);
        Console.WriteLine(point[1]);
    }
    

    值已保存,但您打印的是存储值的类型,而不是实际值。

    要按照您尝试的方式进行操作,您必须为 point 创建自定义类,并覆盖 ToString() 方法:

    using System;
    using System.Collections.Generic;
                        
    public class Program
    {
        public static  void Main()
        {
            Random rnd = new Random();
            var myQ = new Queue<Point>();
            var arr1 = new Point(rnd.Next(0, 10), rnd.Next(0, 10));
            var arr2 = new Point(rnd.Next(0, 10), rnd.Next(0, 10));
            var arr3 = new Point(rnd.Next(0, 10), rnd.Next(0, 10));
            var arr4 = new Point(rnd.Next(0, 10), rnd.Next(0, 10));
    
            myQ.Enqueue(arr1);
            myQ.Enqueue(arr2);
            myQ.Enqueue(arr3);
            myQ.Enqueue(arr4);
    
            foreach (var point in myQ)
            {
                Console.WriteLine(point);
            }
        }
    
        public class Point
        {
            public int PlX {get; set;}
            public int PlY {get; set;}
    
            public Point(int x, int y)
            {
                PlX = x;
                PlY = y;
            }
            public override string ToString()
            {
                return PlX + ", " + PlY;
            }
        }
    }
    

    请注意,这是一个示例 - 它非常基本且不安全(空检查等...)

    【讨论】:

      【解决方案2】:

      你可以使用字符串插值

      foreach (var point in myQ)
      {
          Console.WriteLine($"{point[0]} : {point[1]}");
      }
      

      请注意var 而不是int[]:您不必记住确切的类型(通常很长)并让编译器为您完成。

      你可以这样说:

      public static void Main()
      {
          // First let's generate coordinates
          var rnd = new Random();
          int plX = rnd.Next(0, 10);
          int plY = rnd.Next(0, 10);
      
          // Then create queue
          var myQ = new Queue<int[]>(new int[][] {
              new int[] {plX, plY},
              new int[] {plX, plY},
              new int[] {plX, plY},
              new int[] {plX, plY},  
          });
      
          // Finally, print the queue
          foreach (var point in myQ)
          {
              Console.WriteLine($"{point[0]} : {point[1]}");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-20
        • 2017-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多