none
请问这段程序要怎么修改? RRS feed

  • 问题

  • using System;

    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
        public class TestArray
        {
            static void PrintArray(int[,] w)
            {
                string output = "";
                for (int i = 0; i < w.GetLength(0); i++)
                {
                    for (int j = 0; j < w.GetLength(1); j++)
                        output += String.Format("Element({0},{1})=2", i, j, w[i, j] + "\t");
                    output += "\n";
                }
                MessageBox.Show(output);
            }
            public static void Main()
            {
                int[,] array1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
                int[,] array2 = { { 1, 2, 3 }, { 4, 1, 6 }, { 7, 1, 9 } };
                int[,] array3;
                array3 = new int[,] { { 1, 2, 3, 1 }, { 4, 5, 6, 2 }, { 7, 8, 9, 3 } };
                int[,] array4 = new int[2, 3];
                for (int i = 0; i < 2; i++)
                     for (int j = 0; j < 3; j++)
                PrintArray(array1);
                PrintArray(array2);
                PrintArray(array3);
                PrintArray(array4);
                PrintArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });

               
            }
        }
    }

    请问如何将  for (int i = 0; i < w.GetLength(0); i++)
                {
                    for (int j = 0; j < w.GetLength(1); j++)
                        output += String.Format("Element({0},{1})=2", i, j, w[i, j] + "\t");
                    output += "\n";
                }

    这两个for循环改成foreach循环?

    2012年4月25日 11:08

答案

  • 首先指出,你没有输出w[i,j],正解是:

    for (int i = 0; i < w.GetLength(0); i++)
                 {
                     for (int j = 0; j < w.GetLength(1); j++)
                         output += String.Format("Element({0},{1})={2}", i, j, w[i, j] + "\t");
                     output += "\n";
                 }

    改成foreach——因为现在是二维数组,foreach就一路遍历到底了,我估计无法更改。除非你使用交错数组

    namespace MyTest { public class TestArray { static void PrintArray(int[][] w) { string output = ""; foreach (var item in w) //遍历外边的数组 { foreach (var value in item) { //先查找某个数组在交错数组中的位置(y),然后查找具体某个数值在该数组中的位置。 output+=string.Format("({0},{1}) Is {2}\n",Array.IndexOf(w,item),Array.IndexOf(item,value),value); } } Console.WriteLine(output); } public static void Main() { int[][] array1 = new int[][] { new int[]{ 1, 2, 3 }, new int[]{ 4, 5, 6 }, new int[]{ 7, 8, 9 } }; PrintArray(array1); } } }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月26日 2:45
    版主

全部回复

  • 首先指出,你没有输出w[i,j],正解是:

    for (int i = 0; i < w.GetLength(0); i++)
                 {
                     for (int j = 0; j < w.GetLength(1); j++)
                         output += String.Format("Element({0},{1})={2}", i, j, w[i, j] + "\t");
                     output += "\n";
                 }

    改成foreach——因为现在是二维数组,foreach就一路遍历到底了,我估计无法更改。除非你使用交错数组

    namespace MyTest { public class TestArray { static void PrintArray(int[][] w) { string output = ""; foreach (var item in w) //遍历外边的数组 { foreach (var value in item) { //先查找某个数组在交错数组中的位置(y),然后查找具体某个数值在该数组中的位置。 output+=string.Format("({0},{1}) Is {2}\n",Array.IndexOf(w,item),Array.IndexOf(item,value),value); } } Console.WriteLine(output); } public static void Main() { int[][] array1 = new int[][] { new int[]{ 1, 2, 3 }, new int[]{ 4, 5, 6 }, new int[]{ 7, 8, 9 } }; PrintArray(array1); } } }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月26日 2:45
    版主
  • @编程志愿者

    呵呵,如果不是你那个削皮的头像,及其招牌式的下面的文字,差点认不出你来了


    2012年4月26日 5:09