加强版:返回一个整数组中最大子数组的和(小组成员:廖强,侯诚超)

+小组成员:廖强,侯诚超

设计思想

         设计宽口:使用textbox输出整数数组.输入数组大小.取值范围等。

         程序编辑:1.使用取随机数函数取随机数

                         2.利用for循环将随机数放入到一个数组中

                         3.调用获取最大子数组和的子函数得到该数组的最大子数组和

                         4.将最大子数组和在textbox中显示出来

        调试和运行程序

出现的问题

1.调用求最大子数组和函数时求得的数值错误。

2.主函数定义的数组类型和子函数定义的数组类型不一致

3.在调试程序的时候,如果选择“输入数组计算”时,点击时出现错误

解决方案

1.更改子函数,使其求得的数为最大子函数和。

2.主函数中的数组定义的是double类型,子函数定义的是int类型,在调用子函数之前将数组的类型转化为int类型

3.分隔数值的逗号必须时西文

源代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 最大数组和
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
       
        private void button1_Click(object sender, EventArgs e)//取随机数时计算
        {
            int maxsum;
            double size = Convert.ToDouble(textBox4.Text);
            double range1 = Convert.ToDouble(textBox3.Text);
            double range2 = Convert.ToDouble(textBox5.Text);
            int[] list = new int[(int)size];
            Random r = new Random();
            for (int i = 0; i < size; i++)
            {
               double temp = r.Next((int)range1, (int)range2);
               list[i] = (int)temp;
               textBox1.AppendText(list[i].ToString() + " , ");
            }
            maxsum = MaxListSum(list);
            textBox6.Text = maxsum.ToString();
        }
        public int MaxListSum(int[] a)//获取最大子数组和
        {
            if (null == a)
            {
                return 0;
            }
            if (a.Length == 1)
            {
                return a[0];
            }
            int sum = a[0];
            int temp = a[0];
            for (int i = 1; i < a.Length; i++)
            {
                temp = max(temp + a[i], a[i]);
                if (sum < temp)
                {
                    sum = temp;
                }
            }
            return sum;
        }

        public int max(int a, int b)
        {
            return a > b ? a : b;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = null;
            textBox6.Text = null;
        }

        private void button4_Click(object sender, EventArgs e)//输入已知数组时计算
        {
            int maxsum;
            string[] strN = textBox1.Text.Split(',');
            int[] list = new int[strN.Length];
            for (int i = 0; i < strN.Length; i++)
            {
                list[i] = int.Parse(strN[i]);
            }
            maxsum = MaxListSum(list);
            textBox6.Text = maxsum.ToString();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {

        }

    }
}

结果截图

当取值范围超过int32时,会出现如下情况

总结

在编写程序代码时,必须仔细认真,不能出现一点点的错误,例如输入的符号分中英文,代码字母分大小写,这是常出现的问题。

编写代码时要分段编写,还要有必要的注释,在定义变量类型的时候要根据这个变量的用途来定义。

在编写子函数过程中,先简单调试一下子函数是否能够正确运行,当无法运行时,必定时代码输入错误,当输出结果不正确时,必然时逻辑错误

 小组照片

猜你喜欢

转载自www.cnblogs.com/ct203/p/9783361.html
今日推荐