第三次作业,GUI设计之最大子序列和
先吐槽一发!!!学渣表示作业太难了啊!!!!!!做一次作业要用好久好久,要问好多好多大神才能行,虽然确实提高不少,花的时间真是……!!!!!
这次作业费劲心血,希望老师能给个好分数,至少对于学渣来说已经很不容易了。
还要感谢我的室友杨超同学(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文件夹下面,打开网页,当当当当!!!!!成功了
真是不容易
当然还有未完成的一些功能,比如在显示结果的同时将最大和的矩形通过颜色标记出来。这个可以实现,但是对于我来说需要不少的时间,先交个基础版的吧。
题外话
结对编程让我学到了很多,也让我找到了乐趣,在和同学讨论一个程序如何实现的过程中,我能够听到别人的想法,并用别人的想法来优化我的思路,这样的设计软件的方法真是不错
这次作业做了很久,是今天早晨在完成的全部的工作,下午把博客写完,博客也写了不少时间,貌似超过了规定的交作业时间一点点,希望老师能够通融
我真的有在很努力的写程序,实在因为水平有限,而且时间不是很多,以后还要多靠大神,谁让我自己是个“坑”~~~
第三次作业,GUI设计之最大子序列和的更多相关文章
- FZU软工第三次作业-原型设计
目录 00.前言: 01.PSP表格: 02.需求分析--NABCD模型 N-- Need 需求 A-- Approach 做法 B-- Bnefit 好处 C-- Competitors 竞争 D- ...
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
- OO第三单元作业——魔教规格
OO第三单元作业--魔教规格 JML的理论基础和相关工具 JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...
- OO第三单元作业(JML)总结
OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...
- 《Coderxiaoban团队》第三次作业:团队项目的原型设计
<XXX团队>第三次作业:团队项目的原型设计 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验七 团队作业3:团队项目原型设计与开发 团队名称 Coder ...
- 《ABCD组》第三次作业:团队项目的原型设计
<ABCD组>第三次作业:团队项目的原型设计 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https:// ...
- 《AlwaysRun团队》第三次作业:团队项目的原型设计
<AlwaysRun团队>第三次作业:团队项目的原型设计 项目 内容 这个作业属于哪个课程 [任课教师博客主页链接](https://home.cnblogs.com/u/nwnu-dai ...
- 2017-2018-1 20179205《Linux内核原理与设计》第三周作业
<Linux内核原理与分析>第三周作业 教材学习总结 第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种,是正在执行的程序代码的实时结果:线程,是在进程中活动的对象.而Linu ...
- 软件工程(QLGY2015)第三次作业点评(含成绩)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...
随机推荐
- Android XML使用的学习记录
1. 注释其中一段代码或是一行,可以采用<!-- -->,示例如下 <!-- <EditText android:layout_width=&quo ...
- BZOJ 2440 完全平方数(莫比乌斯-容斥原理)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2440 题意:给定K.求不是完全平方数(这里1不算完全平方数)的倍数的数字组成的数字集合S ...
- Android中ProgressDialog的简单示例
网上一般对进度条的示例都是如何显示,没有在任务结束如何关闭的文章,参考其他文章经过试验之后把整套进度条显示的简单示例如下: 建立android工程等工作都略去,Google一下就可以了. 下面来介绍主 ...
- FFmpeg介绍及参数详细说明
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...
- memcache的应用场景和实现原理
面临的问题 对于高并发高访问的 Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的 ...
- 【<td>】使<td>标签内容居上
<td>有一个叫valign的属性,规定单元格内容的垂直排列方式.有top.middle.bottom.baseline这四个值. 所以,让TD中的内容都居上的实现方法是: <td ...
- 【转】iOS-延迟操作方法总结
原文网址:http://lysongzi.com/2016/01/30/iOS-%E5%BB%B6%E8%BF%9F%E6%93%8D%E4%BD%9C%E6%96%B9%E6%B3%95%E6%80 ...
- Ruby网络服务
#require 'net/http' #p Net::HTTP.get_response(URI.parse('http://www.kuaiyoujia.com')){|res| # puts r ...
- android直接读取数据库文件
public class Dictionary extends Activity implements OnClickListener, TextWatcher{ private final ...
- C# DataGridView的列对象属性探讨 (未完待续)
比较难的几个属性的释义[1]: