第三次作业,GUI设计之最大子序列和

本文详细记录了一位编程新手面对复杂作业时的挑战与成长经历。作者通过结对编程、学习事件监听与Java Applet技术,克服了界面创建、数据处理等难题,最终完成了具有实际功能的小软件。文章不仅分享了编程技巧,还体现了团队合作的重要性及个人在困难面前的坚持精神。

先吐槽一发!!!学渣表示作业太难了啊!!!!!!做一次作业要用好久好久,要问好多好多大神才能行,虽然确实提高不少,花的时间真是……!!!!!

这次作业费劲心血,希望老师能给个好分数,至少对于学渣来说已经很不容易了。

还要感谢我的室友杨超同学(11061098),可以说这个小软件是我和他一起写的,他懂得java语言,我负责写框架,他负责写功能,然后我再把代码集合起来生成小软件。这是我们结对编程的结晶~~~

回到正题,看到第三次的题目,结合课堂有同学提出的建议,用浏览器实现单个程序多个标签的目标非常靠谱,于是学着写Java的Applet了。

先上代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame extends JApplet implements ActionListener{
    private FlowLayout fl=new FlowLayout(FlowLayout.CENTER);
    private JButton bt=new JButton("开始");
    private JLabel lbx=new JLabel("x长度");
    private JLabel lby=new JLabel("y长度");            
    private JTextField tfx=new JTextField(2);
    private JTextField tfy=new JTextField(2);
    private JPanel jpl=new JPanel();
    private JPanel arr=new JPanel();
    private JTextField[][] a=new JTextField[6][6];
    
    public frame()
    {
        jpl.add(bt);
        jpl.add(lbx);
        jpl.add(tfx);
        jpl.add(lby);
        jpl.add(tfy);
        arr.setLayout(new GridLayout(6,6));
        for(int i=0;i<6;i++)
            for(int j=0;j<6;j++)
        {
            a[i][j]=new JTextField(2);
            arr.add(a[i][j]);
        }
        jpl.setSize(200,200);
        bt.addActionListener(this);
        this.add(jpl);
        this.add(arr);
        this.setLayout(fl);
        this.setSize(250,250);
        this.setVisible(true);
        }
    public void actionPerformed(ActionEvent e){

        int x=Integer.parseInt(tfx.getText());
        int y=Integer.parseInt(tfy.getText());
        int b[][]=new int[6][6];
         
         
        for(int i=0;i<y;i++)
        {
            for(int j=0;j<x;j++)
            {
             b[i][j]=Integer.parseInt(a[i][j].getText());
             
            }
        }
    
    int l= find(x,y,b);
        JOptionPane.showMessageDialog( this ,l);
    }
    public void init()
    {
        new frame();
    }
    public int find(int x,int y,int b[][]){
        int s,sum,n;
        int max;
        int c[][]=new int[100][100];
        for(int i=0;i<x;i++)
           {
          n=0;
          for(int j=0;j<y;j++)
             {
               sum=0;
                 for(int t=j;t>=0;t--)
                   {           
                   sum=sum+b[t][i]; 
                   c[n][i]=sum;
                   n++;          
                   }

               }
           }
        
        max=c[0][0];
          for(int i=0;i<(y*(y+1)/2);i++)
           {
           s=c[i][0];
                for(int j=1;j<x;j++){
                    s+=c[i][j]; 
                if(s<c[i][j])s=c[i][j];
                if (max<s) max=s;
           }
           }
         
            return max;
            /*
    */
    }
}

以上就是源代码了,等下慢慢来解读我的程序是怎么写的

再附上嵌入网页的源码

 

<html>
<applet code="frame.class" codebase = "applet" width="320" height="320">
</applet>
</html>

这个网页代码很简单

applet是网页中嵌入的小程序,宽和高为320

这个是小程序的截图

 

使用方法:在x长度和y长度里面输入两个数字,分别是要输入数组的两个维度,x为横向长度,y为纵向长度

在输入完x和y以后在下面的文本框中输入测试数据,比如

在输入完毕以后点击“开始”开始运算,弹出窗口并显示结果

这就是最终答案:12

介绍一下这个小程序是怎么写的:

先说说界面部分

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame extends JApplet implements ActionListener{
    private FlowLayout fl=new FlowLayout(FlowLayout.CENTER);
    private JButton bt=new JButton("开始");
    private JLabel lbx=new JLabel("x长度");
    private JLabel lby=new JLabel("y长度");            
    private JTextField tfx=new JTextField(2);
    private JTextField tfy=new JTextField(2);
    private JPanel jpl=new JPanel();
    private JPanel arr=new JPanel();
    private JTextField[][] a=new JTextField[6][6];
    
    public frame()
    {
        jpl.add(bt);
        jpl.add(lbx);
        jpl.add(tfx);
        jpl.add(lby);
        jpl.add(tfy);
        arr.setLayout(new GridLayout(6,6));
        for(int i=0;i<6;i++)
            for(int j=0;j<6;j++)
        {
            a[i][j]=new JTextField(2);
            arr.add(a[i][j]);
        }
        jpl.setSize(200,200);
        bt.addActionListener(this);
        this.add(jpl);
        this.add(arr);
        this.setLayout(fl);
        this.setSize(250,250);
        this.setVisible(true);
        }

import几个需要用到的方法,创建了一个名为开始的button和x,y轴长度的标签和输入文本框

然后注册了一个jpl的框体,将button,两个标签以及两个文本框放到这个jpl框体中

然后通过数组创建了一个6*6的JTextfield文本框,这个创建花了我很久的时间

刚开始想一个个的手打一个个的创建,后来实在觉得一定可以用for循环来创建

但是百度和书本都没有关于批量创建和引用的内容,于是自己慢慢摸索,写出了这两部分代码发现可以执行并且能够知道文本框的名字

    private JTextField[][] a=new JTextField[6][6];
.......
.....
        arr.setLayout(new GridLayout(6,6));
        for(int i=0;i<6;i++)
            for(int j=0;j<6;j++)
        {
            a[i][j]=new JTextField(2);
            arr.add(a[i][j]);
        }

上面是声明文本框数组变量

下面的部分是创建一个名为arr的框体,设置arr框体的布局为GRIDLAYOUT

通过两个for循环为每个JTEXTFIELD附上名字并且添加到arr的框体当中

然后通过

        this.add(arr);

这个语句将arr框体添加到总框体frame当中。

然后完成的效果就是

上面的第一排是Jpl框体,下面的GRID是arr框体,他们共同被放在frame里面

写完这段界面整整花掉了6个小时啊!!!(学渣你伤不起,从0开始啊!写这个程序之前JAVA怎么写我都不知道。。不说了,都是泪)

介绍完框架,开始绑定函数和添加监听了(监听是什么神奇的东西,我什么都不知道啊!)

学习事件和监听的基础,用时3小时~

public class frame extends JApplet implements ActionListener{

...
...
...
bt.addActionListener(
this); ... ... ... public void actionPerformed(ActionEvent e){

这算是个基本格式了

利用的是点击按钮触发事件的方式

在下面的actionperformed里面写要执行的动作就行了

先测试了一发点击按钮生成对话框的功能

        JOptionPane.showMessageDialog( this ,“shit!”);

发现屏幕上真的出现了一个消息窗口对我说“shit!”

这真是个好消息

后面的工作可以慢慢来了

找到第二次作业的代码,经过长时间的改动和测试改成了在java中能使用的代码,由杨超同学主力完成,我来辅助

public int find(int x,int y,int b[][]){
        int s,sum,n;
        int max;
        int c[][]=new int[100][100];
        for(int i=0;i<x;i++)
           {
          n=0;
          for(int j=0;j<y;j++)
             {
               sum=0;
                 for(int t=j;t>=0;t--)
                   {           
                   sum=sum+b[t][i]; 
                   c[n][i]=sum;
                   n++;          
                   }

               }
           }
        
        max=c[0][0];
          for(int i=0;i<(y*(y+1)/2);i++)
           {
           s=c[i][0];
                for(int j=1;j<x;j++){
                    s+=c[i][j]; 
                if(s<c[i][j])s=c[i][j];
                if (max<s) max=s;
           }
           }
         
            return max;
            /*
    */
    }

然后在调用函数的过程中发现了一个严重的问题!!

Jtextfield的内容为String,要处理的数组要int,怎么转换啊?

尝试了半天,发现要利用一个叫做

Integer.parseInt()的函数

问题又能解决了

利用Integer.parseInt()和gettext()

我顺利的从文本框中得到了我需要的文字,并且是整形的哦~

问我如何知道?我把

JOptionPane.showMessageDialog( this ,“shit”)改成了JOptionPane.showMessageDialog( this ,b[0][0]+b[0][1]);

如果没有转换成int,还是string的话我在b00和b01的位置分别输入1和2,那么信息盒子给出的结果一定是12(string的加号是连接)

如果转化成了整形,那么信息盒子给出的一定是3(int的加号是数学加)。机智!!!!!

又花了一个小时把这个程序搞定

开始测试

把生成的.class拷贝到网页的applet文件夹下面,打开网页,当当当当!!!!!成功了

真是不容易

当然还有未完成的一些功能,比如在显示结果的同时将最大和的矩形通过颜色标记出来。这个可以实现,但是对于我来说需要不少的时间,先交个基础版的吧。

 

 

题外话

结对编程让我学到了很多,也让我找到了乐趣,在和同学讨论一个程序如何实现的过程中,我能够听到别人的想法,并用别人的想法来优化我的思路,这样的设计软件的方法真是不错

这次作业做了很久,是今天早晨在完成的全部的工作,下午把博客写完,博客也写了不少时间,貌似超过了规定的交作业时间一点点,希望老师能够通融

我真的有在很努力的写程序,实在因为水平有限,而且时间不是很多,以后还要多靠大神,谁让我自己是个“坑”~~~

转载于:https://www.cnblogs.com/mxc1868/p/3380784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值