1. 程式人生 > >返回一個二維整數陣列中最大子陣列的和(小組成員:侯誠超,滕達)

返回一個二維整數陣列中最大子陣列的和(小組成員:侯誠超,滕達)

小組成員:侯誠超,滕達

 

設計思想


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的資料輸入。

小組合照