返回一个二维整数数组中最大子数组的和(小组成员:侯诚超,滕达)

小组成员:侯诚超,滕达

设计思想


1.设计窗口:使用了textbox,button,Label窗口控件

2.程序编辑:(1).先编写txt导入程序,确保txt文件能导入到文本框中

                     (2).将txt中的数据放到二维数组中

                     (3).计算该数组的最大子数组和

                     (4).将数组的行数和列数还有最大子数组和输出

3.调试和运行程序

出现的问题

1.txt文件无法显示到文本框中

2.没有将string类型的二维数组转化为整数int类型

3.行数和列数不能正确的输出

解决方法

1. 声明文本读取流,以文本编码格式读取,StreamReader sr = new StreamReader(file.FileName, System.Text.Encoding.Default); 

2.将string类型转化为int类型,intlist[i - 2] = Array.ConvertAll<string, int>(str[i].Split(','), p => { return int.Parse(p); });

3.textBox2.Text = Convert.ToString(a);  a是从文本框中取的行数

运行结果

代码

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

namespace 二维数组
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int i, j;
            string[] str = textBox1.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            int[][] intlist = new int[str.Length][];
            for (i = 2; i < str.Length; i++)
            {

                intlist[i - 2] = Array.ConvertAll<string, int>(str[i].Split(','), p => { return int.Parse(p); });
            }
            int a = (int)Convert.ToDouble(str[0]);
            int b = (int)Convert.ToDouble(str[1]);
            int[]sum = new int[100];
            int max=0,m=0;
            int result=intlist[0][0];
            for (i = 0; i < a; i++)//确定子数组的最大上界(为第i行)
            {
                while (m + i < a)//确定子数组有m+i行
                {
                    //把子数组当成一位数组一样,求最大子数组的和
                    for (j = 0; j < b; j++)
                    {
                        sum[j] = sum[j] + intlist[m + i][j];

                    }
                    max = 0;
                    for (j = 0; j < b; j++)
                    {
                        if (max + sum[j] > sum[j])
                        {
                            max = max + sum[j];
                        }
                        else
                        {
                            max = sum[j];
                        }
                        if (max > result)
                        {
                            result = max;
                        }
                    }
                    m++;//是子数组的行数+1
                }
                m = 0;
                for (j = 0; j < b; j++)
                {
                    sum[j] = 0;
                }
            }
            textBox2.Text = Convert.ToString(a);
            textBox3.Text = Convert.ToString(b);
            textBox4.Text = Convert.ToString(result);

        }

        private void txt文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();   //声明打开文件对话框类file
            file.Filter = "文本文件|*.txt";               //文件过滤器,只显示txt文件
            if (file.ShowDialog() == DialogResult.OK)     //如果文件正常打开
            {
                StreamReader sr = new StreamReader(file.FileName, System.Text.Encoding.Default);   //声明文本读取流,以文本编码格式读取
                textBox1.Text = sr.ReadToEnd();    //将sr中的内容全部放到textBox1.Text中
                sr.Close();
            }
            else
                return;
        }
    }
}

体会


通过这次的小组合作,在前期遇到了许多问题,比如双方的时间冲突,要找到

一段双方都有空的时间,在编写程序的过程中,遇到错误时每个人所想的解决

方法也不同,解决的方案是把双方各自的思想编写以下,寻找出一个更好的解

决方法,通过这次呢,加深了和同学之间的友谊,提升了自己的编程能力,也

掌握了txt的数据输入。

小组合照

猜你喜欢

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