标题:菜鸟初学C#~程序出现问题求解答~谢
只看楼主
wkira
Rank: 1
来 自:内蒙古呼和浩特
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-11-6
结帖率:66.67%
已结贴  问题点数:20 回复次数:10 
菜鸟初学C#~程序出现问题求解答~谢
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        static int iCounter = 0;
        string[,] sPhoneNumberList;
     
        

        private void button1_Click(object sender, EventArgs e)
        {
            sPhoneNumberList = new string[4, 2];
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                sPhoneNumberList[iCounter, 0] = textBox1.Text;
                sPhoneNumberList[iCounter, 1] = textBox2.Text;
                MessageBox.Show("输入成功");
            }
            else
                MessageBox.Show("请输入公司名称以及电话号码");
            iCounter++;
            textBox1.Clear();
            textBox1.Focus();
            textBox2.Clear();
            if (iCounter >= 4)
                label3.Text += ("电话簿已满");
            else
                label3.Text = "";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string sSerarhName;
            if (textBox1.Text != "")
            {
                for (iCounter = 0; iCounter <= 4; iCounter++)
                {
                    sSerarhName = textBox1.Text;
                    if (sPhoneNumberList[iCounter, 0] == sSerarhName)
                        textBox2.Text = sPhoneNumberList[iCounter, 1];
                }
                if (iCounter >= 4)
                    label3.Text = "不存在所查询的公司,请重新输入";
            }
            else
                MessageBox.Show("请输入公司名称");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

刚开始学,加红的地方是提示出错的地方,个人分析原因是sPhoneNumberList是在button1_Click这个里定义并且赋值的,算局部变量,所以其值并没有传递在button2_Click中的sPhoneNumberList,不知道分析的对不对,还请高人指教;
如果是这个原因,请问应该如何改正,以前完全没接触过C#或者是其他面向对象的语言,实在是不会处理,麻烦各位了,万分感谢
搜索更多相关主题的帖子: private public 
2011-11-15 09:51
yinniannian
Rank: 9Rank: 9Rank: 9
来 自:河北省石家庄
等 级:蜘蛛侠
威 望:2
帖 子:256
专家分:1007
注 册:2011-5-13
得分:0 
把你的错误贴出来

代做小型软件。
QQ:449795473
2011-11-16 08:04
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
sPhoneNumberList没有new

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2011-11-16 08:05
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
得分:0 
在定义的时候就可以直接初始化

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2011-11-16 09:45
a6068132
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:131
注 册:2011-5-10
得分:0 
for (iCounter = 0; iCounter <= 4; iCounter++)
                {
                    sSerarhName = textBox1.Text;
                    if (sPhoneNumberList[iCounter, 0] == sSerarhName)
                        textBox2.Text = sPhoneNumberList[iCounter, 1];
                }
上面的数组下标都超过范围了
应该改成 for (iCounter = 0; iCounter <=4; iCounter++)
                {
                    sSerarhName = textBox1.Text;
                    if (sPhoneNumberList[iCounter, 0] == sSerarhName)
                        textBox2.Text = sPhoneNumberList[iCounter, 1];
                }
2011-11-16 14:21
a6068132
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:131
注 册:2011-5-10
得分:0 
for (iCounter = 0; iCounter <4; iCounter++)
                {
                    sSerarhName = textBox1.Text;
                    if (sPhoneNumberList[iCounter, 0] == sSerarhName)
                        textBox2.Text = sPhoneNumberList[iCounter, 1];
                }
2011-11-16 14:21
wkira
Rank: 1
来 自:内蒙古呼和浩特
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-11-6
得分:0 
以下是引用a6068132在2011-11-16 14:21:50的发言:

 for (iCounter = 0; iCounter <4; iCounter++)
                {
                    sSerarhName = textBox1.Text;
                    if (sPhoneNumberList == sSerarhName)
                        textBox2.Text = sPhoneNumberList;
                }

按照你说的修改了 但是还是出现了索引超出数组界限的问题……不知道是什么原因?
2011-11-17 09:49
wkira
Rank: 1
来 自:内蒙古呼和浩特
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-11-6
得分:0 
以下是引用yinniannian在2011-11-16 08:04:28的发言:

把你的错误贴出来

现在的具体遇到的问题是这样的  
如果我运行程序,在不往sPhoneNumberList数组中输入公司名称、电话号码,直接查询 出现的是如图所示的问题

如果我先输入公司名称、电话号码 再查询 则出现的是这样的问题


不知道是什么原因了……
2011-11-17 09:52
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
得分:0 
由于你在button1的click中new了sPhoneNumberList
在函数执行完了,new的东西都被释放了
不妨在button2的click中设置断点,看看各个变量是什么
数组索引越界这种问题跟一下代码很容易查出问题的

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2011-11-17 10:13
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
得分:20 
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        static int iCounter = 0;
        string[,] sPhoneNumberList;
     
        

        private void button1_Click(object sender, EventArgs e)
        {
            sPhoneNumberList = new string[4, 2];
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                sPhoneNumberList[iCounter, 0] = textBox1.Text;
                sPhoneNumberList[iCounter, 1] = textBox2.Text;
                MessageBox.Show("输入成功");
            }
            else
                MessageBox.Show("请输入公司名称以及电话号码");
            iCounter++;       //不管用户是否输入正确都会执行下面的语句,应该写成else{Mess....;return; }
            textBox1.Clear();
            textBox1.Focus();
            textBox2.Clear();
            if (iCounter >= 4) //这句话是什么意思?>=4提示电话簿已满?这句话应该在最开始的地方进行判断,如果电话簿满了,直接return;
                label3.Text += ("电话簿已满");
            else
                label3.Text = "";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string sSerarhName;
            if (textBox1.Text != "")
            {
                for (iCounter = 0; iCounter <= 4; iCounter++)//这里会改变iCounter的值,如果iCounter的值小于4的话,那么就算用户点击了button1,后面的 if (sPhoneNumberList[iCounter, 0]...)也会出现无效数据。这里应该写成for (int i=0;i<=iCounter;i++){... }
                {
                    sSerarhName = textBox1.Text;
                    if (sPhoneNumberList[iCounter, 0] == sSerarhName)//如果用户没有点击button1的话,你这句就会出错,因为sPhoneNumberList没有初始化,所以应该在最开始声明sPhoneNumberList的时候,就初始化它
                        textBox2.Text = sPhoneNumberList[iCounter, 1];
                }
                if (iCounter >= 4)//iCounter是你自己设置的,这里判断iCounter是否大于4的用意是什么?就像我上面说的,如果iCounter在button1_Click的最开始的地方就限制它,这里根本就不需要这条语句
                    label3.Text = "不存在所查询的公司,请重新输入";
            }
            else
                MessageBox.Show("请输入公司名称");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}



[ 本帖最后由 q332010372 于 2011-11-17 13:50 编辑 ]
2011-11-17 13:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-355291-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.106097 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved