黑马程序员技术交流社区

标题: 帮忙看下这个程序 [打印本页]

作者: 硬别    时间: 2013-10-22 19:23
标题: 帮忙看下这个程序
本帖最后由 硬别 于 2013-10-26 16:25 编辑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 作业3
{
    class Program
    {//将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|aaa”
        static void Main(string[] args)
        {
            int i=0;
            string []names = new string [5];
            for (i = 0; i <= names.Length; i++)
            {
                Console.WriteLine("请输入名字:");
                names = Console.ReadLine();
                names = names + "|";
            }
            Console.WriteLine("{0}",names);
            Console.ReadKey();
        }
    }
}

程序这样的 运行 输完第五个就开始报错了 不知道为什么 请大神修改 并且讲解

作者: 迷你卡卡    时间: 2013-10-22 19:29
先不说其他的,Console.WriteLine("{0}",names[i]);
输出的话,放在循环外面,这时这个 i 在哪里呢?,变量作用域问题
其次,判断条件那里
作者: Liu阳    时间: 2013-10-22 19:38
本帖最后由 Liu阳 于 2013-10-22 19:41 编辑

    class Program
    {//将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|aaa”
        static void Main(string[] args)
        {
            int i = 0;
            string[] names = new string[5];
//这里的<=操作已经第6次了,你定义的字符串数组是5个,数组下标是从0开始哦,要写<就是5次了
            for (i = 0; i <= names.Length; i++)
            {
                Console.WriteLine("请输入名字:");
                names
= Console.ReadLine();
                names
= names
+ "|";
            }
//这里有问题啦,你的i是个全局变量,你遍历的时候一直在给i增加1,所以你输出name
的这个i已经是6喽
//对吗
            Console.WriteLine("{0}", names
);
            Console.ReadKey();
        }
    }


作者: 黑色海    时间: 2013-10-22 19:44
循环变量:i <= names.Length 改成 i<names.Length 就行了。。。
作者: Liu阳    时间: 2013-10-22 19:46
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace test12
  6. {
  7.     class Program
  8.     {//将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|aaa”
  9.         static void Main(string[] args)
  10.         {
  11.             string[] names = new string[5];
  12.             for (int i = 0; i < names.Length; i++)
  13.             {
  14.                 Console.WriteLine("请输入名字:");
  15.                 names[i] = Console.ReadLine();
  16. //最后一个不许愿添加"|"
  17.                 if (i < 4)
  18.                 {
  19.                     names[i] = names[i] + "|";
  20.                 }           
  21.             }
  22.             for (int i = 0; i < names.Length; i++)
  23.             {
  24.                     Console.Write("{0}", names[i]);
  25.             }
  26.             Console.ReadKey();
  27.         }
  28.     }
  29. }
复制代码

作者: 有钱就有希望    时间: 2013-10-22 20:16
  string []names = new string [5];
            for (i = 0; i <= names.Length; i++)
// i <= names.Length数组超出界线, 应改为i < names.Length,数组是从第0个开始执行的;
作者: 张锟-i    时间: 2013-10-22 20:44
        Console.WriteLine("{0}",names[i]);
            Console.ReadKey();
      i 是for循环内的局部变量,你写到外变了 ,这样会出错的
作者: 王云峰    时间: 2013-10-22 21:57
  1. int i=0;
  2.             string []names = new string [5];
  3.             for (i = 0; i <=names.Length; i++)//<=的话,超出数组范围了,用<
  4.             {
  5.                 Console.WriteLine("请输入名字:");
  6.                 names[i] = Console.ReadLine();
  7.                 names[i] = names[i] + "|";
  8.             }
  9.            for(int i=0;i<names.Length;i++)//输出数组要循环
  10.             {
  11.             Console.WriteLine("{0}",names[i]);
  12.             }
  13.             Console.ReadKey();
复制代码

作者: 喜之郎果冻    时间: 2013-10-22 22:30
for(int i =0;i<=name.Length;i++)你这里写的不对,因为数组的下标是从0开始的,如果你的数组的长度是5那么元素的下标就是0~4。所以你这里实际上是循环了6次,肯定要报超出数组界限的错误。应该改成i<name.Length 或者i<=name.Length -1
作者: 小人渣子    时间: 2013-10-22 22:59
i <= names.Length应改成i<names.Length;
上面的循环执行完之后 i 的值应该是5,所以Console.WriteLine("{0}",names[i]);中的i应该改成 i-1;
还有就是names[i] = Console.ReadLine(); names[i] = names[i] + "|";这两句是不会得到你想要的结果的,楼主再改改--
               
作者: 段朝骞    时间: 2013-10-22 23:01
Length是5,但是脚标最大为4,数组溢出了,改为 for (i = 0; i < names.Length; i++),不能=
作者: aihuahuaxx    时间: 2013-10-22 23:13
首先你的i的问题,你循环只能<不能等于,等于超出界限,其次你的i是全局变量,你在下面输出的话i输出的是那个呢?

你要想全输出出来。
  for (int i = 0; i < names.Length; i++)

            {

                    Console.Write("{0}", names[i]);

            }

            Console.ReadKey();

作者: 姚团结    时间: 2013-10-23 00:53
索引超出了数组界限。
i <names.Length;
作者: 追溯客    时间: 2013-10-23 09:22
如问题被解决,请及时把分类设为"已解决",黑马有你更精彩!

作者: 姐的霸气谁懂    时间: 2013-10-23 10:55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test1
{
    class Program
    {
        //将一个字符串数组输出为|分割的形式,比如原字符串数组为:string[] str= {"梅西","卡卡","郑大世"}, 输出为:"梅西|卡卡|郑大世"。

        static void Main(string[] args)
        {  //声明一个已赋值的字符串
            string[] str = {"梅西","卡卡","郑大世"};
            //遍历数组成员
            for (int i = 0; i < str.Length; i++)
            {  //通过条件使得最后一个字符串后面不出现|
                if (i < str.Length - 1)
                {
                    Console.Write("{0}|", str[i]);
                }
                else
                {
                    Console.Write("{0}", str[i]);
                }
            }
            
            Console.ReadKey();
        }
    }
}
我自己写的 仅供参考  逻辑有问题 输出也有问题 应该把输出放进for循环里面啊
作者: 芦路    时间: 2013-10-23 14:37
本帖最后由 芦路 于 2013-10-23 14:41 编辑

第一:循环条件:for (i = 0; i <= names.Length; i++)
改成for (i = 0; i < names.Length; i++)
或者for (i = 0; i <= names.Length-1; i++)
超出数组长度了
第二:输出语句:Console.WriteLine("{0}",names);
输出语句在循环外面,他只能输出一个元素

下面是我给你改良的:
  1. int i = 0;
  2.             string[] names = new string[5];
  3.             for (i = 0; i < names.Length; i++)
  4.             {
  5.                 Console.WriteLine("请输入名字:");
  6.                 names[i] = Console.ReadLine();
  7.                 if (i == names.Length - 1)  //判断是否是最后一个 是就跳出
  8.                 { break; }
  9.                 names[i] = names[i] + "|";               
  10.             }
  11.             foreach (string s in names) //遍历输出
  12.             {
  13.                 Console.Write(s);
  14.             }
  15.             Console.ReadKey();
复制代码

作者: 何俞平    时间: 2013-10-25 23:16
第一:循环条件:for (i = 0; i <= names.Length; i++)  的 i <= names.Length应该为 i < names.Length,否则循环了六次,超出数组长度了。
第二:输出语句:Console.WriteLine("{0}",names
);输出语句在循环外面,只能输出一个元素
这题你可以声明一个string类型的变量str用于接收names的累加。循环次数可以改为4次。代码如下:
namespace 作业3
{
    class Program
    {//将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|aaa”
        static void Main(string[] args)
        {
            int i=0;
            string []names = new string [5];

            //声明一个string类型的变量str用于接收names的累加,str的初始值为""
           string str="";
          //循环names.Length-1次
            for (i = 0; i <names.Length-1; i++)
            {
                Console.WriteLine("请输入名字:");
                names = Console.ReadLine();
                str+=name+"|";

            }
            Console.WriteLine("{0}",str+names[names.Length]);
            Console.ReadKey();
        }
    }
}









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2