前面图那么多槽,吐的有点慌,咱们写程序的还是要脚踏实地的往前迈进,不废话,直接上:
1.c++里面int类型的变量一定要去初始化,不然你就会和一样悲剧,上代码:
//查看各个学生的成绩
cout<<"查看各个学生的成绩:"<<endl;
for(int i=0;i<N;i++){
Math+=stu[i].score[0];
Chinese+=stu[i].score[1];
English+=stu[i].score[2];
History+=stu[i].score[3];
Politics+=stu[i].score[4];
}
//各门均分
double Mathaver = Math/5;
double Chineseaver =Chinese/5;
double Englishaver = English/5;
double Historyaver = History/5;
double Politicsaver = Politics/5;
//输出各门总成绩和均分
cout<<endl;
cout<<"数学总分: "<<"语文总分: "<<"英语总分: "<<"历史总分: "<<"政治总分: "<<endl;
cout<<Math<<" "<<Chinese<<" "<<English<<" "<<History<<" "<<Politics<<endl;
说明:前面定义了几门成绩为int型,好输出的结果是-6923523什么的,你以为是地址,难倒是没有取到变量的值?不是,每个学生的没门成绩我都测试过了都是有效的整数值。其实问题出在Math 这些歌int型没有初始化就直接+=xxxx
,c++中 int型变量没有初始化默认为最小的值那就是-xxxxxxx,好,然后你拿它去和小的可怜的成绩加减不出个“地址”来吓吓你这个初学者才怪
2.之前写队列的时候遇到一个很好的数组copy函数很牛逼的,一显高端:
上代码:
系统提供的数组copy函数:
如果参数 src 和 dest 引用相同的数组对象,则复制的执行过程就好像首先将 srcPos 到 srcPos+length-1
位置的组件复制到一个带有 length 组件的临时数组,
然后再将此临时数组的内容复制到目标数组的 destPos 到 destPos+length-1 位置一样。
ex:
System.arraycopy(srcA,0,destA,0,srcA.length);
3.常用的一些类,比较舒服,我是这么觉得的:
Scanner Random 这两个调用的时候都有点像,难倒优秀的类有共性?
注意Scanner的作用是从命令行中获取代码,所以它一般的构造函数都有个参数(System.in)好像系统告诉你:快多点代码进来和我作伴吧
4. 细节的几何堆积,不解释,自己欣赏
敢说集合这么伟大的发明不重要,什么东西的存在离得开容许他存在的容器?
大集合的常用实现类:
Set: HashSet() , TreeSet()
List: Vector() , ArrayList()
Map:HashMap() , Hashtable()
map集合我也玩了一下,里面要用到接口调用方法的,比如collection能iterator() size() 等等
返回出一些必需的数据。我再次震精了,呵呵,厉害的接口敢直接掉方法牛的一逼
注意的是:map集合中,key和value的分别是以两种不同的对象保存的,然后key的值是唯一的,value的值不是唯一的
5.再讲2个细节我就讲大东西了:
①组件在窗体布局的一些方法:
this.add(xxx,boarderlayout.east) 5个方位 east west center north south 补一下英语
xxx.setbounds(x,x,x,x) 坐标和大小
我敢说setbounds这方法在swing界面布局谁人能出其右,坐标精确定位,大小自由调整,一个函数敲定,一览众山小。
②setsize() 和setpreferredsize()的区别:
之前我就操了,建立一个janel对象,设置了各种大小不起作用,还是分布在窗体的一个角落里啜泣;
原来他是轻量级的,只能有setpreferredsize()方法,但是它为什么又这么贱?放着个setsize()不能用?
我反正是搞不清楚。。。记住吧少年!
setsize() for frame ok?
setpreferredsize() for small thing ok?
6.大餐:讲讲这周我反复烦的错误:
一、大家知道g是什么东西?
看下面一一道来:
private Graphics g;用来干吗?声明一个画布对象。画布是什么
不是说好了java世界万物皆对象么?
那好g就是创建的一个画布的对象,想想油画的画画在哪里?
(如果x是窗体:
x.setvivuable(true);
)
g = x.getGraphics();
g就是个对象别想多了,这上面不是给g赋值吗?
只不过赋值的是抽象的一个画布,x的画布!
关于这个画板我有点说的:
public void showUI extends JFrame(){
JFrame jf = new JFrame();
}
public void paint(Graphics g){
super.paint(g);
}
你可能已经发现了 这个不能实现重绘,为什么?
因为,有两个窗体,我重绘的是showUI窗体,然后画布是取的第二个jframe jf!
我又犯了类似的很多错误,比如监听加给了jframe没嫁给jpanel导致坐标出错啊,
重绘加错给了jframe 没有加给jpanel都会出现你不会得到想要的结果,事实就是这么残酷!
所以我想说:在你为整个界面添加什么组件以后,已经要检查一下重绘、监听等等还有一些方法的调用时候和你修改以后想要的结果对的上号
二、我想说一下匿名内部类:
第一次接触匿名,我是在写画板的时候,呵呵,就是最近。
我看到这个玩意比创建一个监听器类来的方便:
看:
创建监听器类的方法:
ButttonListener bl = new ButtonListener(参数)
x.add(bl)
还要让bl类去实现一个actionlistener类,多麻烦
看看人家匿名:x.add(new ActionListener{
actionperformed(Event e){
}
});
多简单!
我首先是记住这种格式,哦,添加监听是吧,就捞一个匿名内部类来解决
其实我看到的还不止,像boss左就给了我一种新的匿名内部类,让他还能解决重绘的那桩子事
这是画棋盘时候的调用
JPanel jpnlft = new JPanel(){
/**
* 重写绘制窗体的方法
*/
public void paint(Graphics g){
//重写绘制窗体
super.paint(g);
//绘制棋盘的方法,先画横线再画竖线
for(int i=0;i<Config.rows;i++){
g.drawLine(Config.xo,Config.y0+Config.size*i , Config.xo+(Config.columns-1)*Config.size,Config.y0+Config.size*i );
}
//画竖线
for(int j=0;j<Config.columns;j++){
g.drawLine(Config.xo+j*Config.size, Config.y0,Config.xo+j*Config.size , Config.y0+(Config.rows-1)*Config.size);
}
}
};
这里我找到了匿名的几个蛮不错的定义,帮助我们更好理解和使用:
1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是覆盖。
2,只是为了获得一个对象实例,不需要知道其实际类型。
3,类名没有意义,也就是不需要使用到。
我反正是懂了,你们呢?
好了时间不多,人有点不舒服先3了,下期再见!