【问题标题】:need to search an entire array not just one [closed]需要搜索整个数组而不仅仅是一个[关闭]
【发布时间】:2014-03-20 13:58:53
【问题描述】:

很抱歉问了太多问题,但是当我将字符串与数组中的字符串进行比较时遇到问题,它只会搜索数组的一个实例,例如该程序允许您将患者添加到数组中,但是当我使用了比较字符串,它只会与最后添加的患者进行比较,你能帮帮我吗?

这是我的程序:

     public class Patient
    {
        public string patientidString;
        public string firstNameString;
        public string lastNameString;
        public string dateString;

        public Patient()
        {
            patientidString = "";
            firstNameString = "";
            lastNameString = "";
            dateString = "";
        }

        public Patient(string idValue, string firstNameVal, string lastNameVal, string dateVal)
        {
            patientidString = idValue;
            firstNameString = firstNameVal;
            lastNameString = lastNameVal;
            dateString = dateVal;
        }

    }


    //Array
    Patient[] patientInfo = new Patient[10];


    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < patientInfo.Length; ++i)
        patientInfo[i] = new Patient();
        try
        {
            foreach (Patient patientinfoIndex in patientInfo)

            patientInfo[itemCountInteger].patientidString = textBox1.Text;
            patientInfo[itemCountInteger].firstNameString = textBox2.Text;
            patientInfo[itemCountInteger].lastNameString = textBox3.Text;
            patientInfo[itemCountInteger].dateString = dateTimePicker1.Text;

            string names = patientInfo[itemCountInteger].patientidString + "  " + patientInfo[itemCountInteger].firstNameString + " " + patientInfo[itemCountInteger].lastNameString;
            listBox1.Items.Add(names);
            itemCountInteger++;
            listBox1.SelectedItem = names;
        }
        catch
        {
            MessageBox.Show("Contacts are limited to 20. Please delete some contacts prior to adding more.");
        }

    }


    //Search Button search a patients id and display his surname in the label if patient is found  display his surname and name
    private void button2_Click(object sender, EventArgs e)
    {

        int intTest = 0;

        for (int x = 0; x < patientInfo.Length; x++)
        {
            if (textBox4.Text == patientInfo[x].patientidString)
            {
                label6.Text = (patientInfo[x].firstNameString + "  " + patientInfo[x].lastNameString);
                PatientForm patientform = new PatientForm();
                patientform.Show();
                patientform.label6.Text = (patientInfo[x].patientidString);
                patientform.label7.Text = (patientInfo[x].firstNameString);
                patientform.label8.Text =(patientInfo[x].lastNameString);
                patientform.dateTimePicker1.Text = (patientInfo[x].dateString);
                intTest = 1;
            }

        }

        if (intTest == 0)
        {
            label6.Text = ("not found");
        }
    }

【问题讨论】:

    标签: c# arrays string visual-studio-2010 class


    【解决方案1】:

    如果您使用的是foreach 循环,则不需要使用索引器,

    foreach (Patient patientinfoIndex in patientInfo)
    {
        patientinfoIndex.patientidString = textBox1.Text;
        patientinfoIndex.firstNameString = textBox2.Text;
        patientinfoIndex.lastNameString = textBox3.Text;
        patientinfoIndex.dateString = dateTimePicker1.Text;
    
        string names = 
            patientinfoIndex.patientidString + "  " + 
            patientinfoIndex.firstNameString + " " + 
            patientinfoIndex.lastNameString;
    
        listBox1.Items.Add(names);
        listBox1.SelectedItem = names;
    }
    

    您还缺少大括号 { },这将导致循环仅执行循环声明之后的第一条语句,而不执行其余语句。

    【讨论】:

    • 如果我把 idexes 拿出来,程序不会知道 patientString 是什么加上如果我添加括号它会在单击按钮时一次创建 10 个患者
    • 我不明白你的意思是什么,它会一次创建 10 名患者。根据您的代码,它已经在这样做了。
    【解决方案2】:

    我假设您的 button1_Click 函数已绑定到“添加新患者”按钮。

    代码行

    for (int i = 0; i < patientInfo.Length; ++i)
        patientInfo[i] = new Patient();
    

    每次添加新患者时都会清除您之前输入的所有患者数据!这就是为什么您在搜索时只能找到您输入的最后一位患者。您需要将这些代码行移到其他地方,例如表单类的构造函数。

    【讨论】:

    • 不能这样做,因为我得到错误:无法通过嵌套类型访问外部类型的非静态成员
    • @user3439080 你把代码移到哪里去了?为什么有嵌套类?
    • 我尝试将其移至构造函数患者和下面的那个
    • @user3439080 该代码正在调用患者构造函数,因此您不想将其移动到患者构造函数中。您想将其移动到您正在使用的表单类中。
    • 非常感谢它的工作
    【解决方案3】:

    intTest = 1; 之后,您需要打破for 循环。

    intTest = 1;
    break;
    

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      相关资源
      最近更新 更多