本人刚学C#,现在遇到个问题想不明白,希望大家帮忙解决下!是这样的,下面代码的作用是把一个IP地址(如127.0.0.1)分离成127 0 0 1,就是以“.”为分割点,分离四个数字。但是有个疑惑就是我明明定于了数组a的只能存储3个字符串。为什么下面FOR循环用了4次,然后下面还输出a[5]也没有报错数组越界的错误呢?搞不懂!!!!using System;
using System.Collections.Generic;
using System.Text;namespace myStudyDemoControl
{
//<summary>
//此示例是我用来学习C#做的例子
//</summary>
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你的IP地址:");
string[] a = new string[3];
string b = Console.ReadLine();
a = b.Split('.');
for (int i = 0; i < 4; i++)
{
Console.WriteLine("第 {0}个数为:{1}",i+1,a[i]);
} Console.WriteLine(a[5]);
}
}
}
a = new string[3]; 的值已经被改了.for (int i = 0; i < 4; i++)改为 for (int i = 0; i < a.Length; i++)看看数组的实际长度.
a.length
同为正解
string b = Console.ReadLine();
a = b.Split('.'); // 此时数组 a 被重新赋值, 长度依 b 的内容而定
// 再例如:
int x = 5; // 此时 x 的值为 5.
x = int.Parse(Console.ReadLine()); // 此时 x 被重新赋值, 由你的输入决定.
string b = "127.0.0.1";
a = b.Split('.');
this.button1.Text = a.Length.ToString();
this.button1.Text = a[5];lz的a[5]不报越界? 我的为什么会啊? 有没搞错啊、。。
编译可以通过,但是在执行发生了一个Exception了。
因为在编译的时候无法得到a的实际长度。a.length在实际运行的时候才可能获得。
因为a是对b.split('.')后的结果,而b是靠你输入。如果你输入是【127.0.0.1】按‘.’分就是4个,如果你输入【1.2.3.4.5.6.7.8.9】那么a.lenght就是9;如果想这样写的话,最好写下try{...}catch{...}去捕捉下。这样比较好。