Java软件设计大赛培训笔记.docx
《Java软件设计大赛培训笔记.docx》由会员分享,可在线阅读,更多相关《Java软件设计大赛培训笔记.docx(14页珍藏版)》请在冰豆网上搜索。
Java软件设计大赛培训笔记
Java培训笔记
(2012年2月15日到2012年2月25日共10天)
2月15日:
1、上课具体时间:
09:
00——12:
00(讲理论);14:
30——17:
00
2、内容:
Java基本知识复习(基本语法、面向对象)、实例演练
3、使用JDK1.5和Eclipse3.6
4、快捷键说明:
Alt+1:
提示;Ctrl+Shift+1多行注释;ctrl+1
Alt+/:
显示关键词下拉菜单
注释快捷键:
(1)单行:
ctrl+/
(2)多行:
ctrl+shift+/
5、Eclipse配置之中文帮助文档:
图1主界面
图2加载JDK界面
图3加载中文帮助文档的界面
(2)中文注释
图4中文显示注释的路径设置——去掉原路径界面
2012年2月16日星期四:
1、泛型:
可以定义泛型变量、类、接口、函数等;
定义泛型类:
publicclassGenSample{}
定义泛型类型:
publicUtest(Ua,Tb)
2、代码格式整理快捷键:
Ctrl+shift+F
3、键盘输入:
(1)窗口输入:
importjava.util.Scanner;
Scannerstr1=newScanner(System.in);
intn=str1.nextInt();
(2)对话框输入:
importjavax.swing.JOptionPane;
Stringstr1=JOptionPane.showInputDialog("请输入任意一个正整数:
");
intnum=Integer.parseInt(str1);
4、注释快捷键:
(1)单行:
ctrl+/
(2)多行:
ctrl+shift+/
2012年2月17日
1、集合:
(1)Set集合不允许有重复值;而List集合没有这规定。
(2)Map、Collection、Iterator
数据量很大且经常做增减则用LinkedList,不用增减则用ArrayList
(3)Map集合中的对象通过Collection访问
(4)使用集合的情况:
当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类
2、每行10个元素输出(输出集合中的元素):
Setset=newTreeSet();
set.add(“”);
intcols=1;
Iteratorit=set.iterator();
while(it.hasNext()){
System.out.print(it.next()+"");
if(cols++==15){
System.out.println();//每行达到15个后自动换行
cols=1;
}
}
注意:
以上是有规律的输出(自己控制);也可以直接集合形式输出:
System.out.println(set);
2012年2月18日
今天内容:
面向对象基础、异常与保护、I/O、读写文件、递归
1、多态性:
方法名相同,参数列表不同
2、文本操作:
(1)如果读写的是字符串:
用BufferedReader
(2)如果读写高整字符串:
用DataInputStream、DataOutputStream
(3)如果进行数据量大的操作:
用BufferedInputStream(缓冲)
如:
DataInputStreamfin=newDataInputStream(newBufferedInputStream(newFileInputStream(fileName)));
3、二进制操作
4、递归:
(1)递归定义:
是指在定义自身的同时又出现了对自身的引用。
(2)递归调用定义:
如果一个方法直接或间接调用自身则成为递归调用
5、static使用:
(1)、非静态的方法可以调用静态的或者非静态的属性和方法;
(2)、静态的方法不可以调用非静态的属性和方法,因为非静态的还不一定存在,只能先构造出来后,再通过实例引用
例如在main方法中可以直接调用static的方法,调用非static方法需要先构造出类的实例,通过实例才能调用方法
(3)、不能在静态方法中访问非静态成员变量;
(4)、不能在静态方法中使用this关键字。
6、同一个包里,调用一个封装类里的方法:
类型变量=new封装类名称().封装方法;
2012月2月19日
1、java数据结构——各种算法(排序)讲解
要掌握经典常用的,掌握二叉树算法。
2、快速显示setter方法和getter方法:
封装了一个属性,将属性选中——右击——source——
3、使用charAt()方法取出字符串指定位置的字符,如:
str.charAt(下标);
2012月2月20日
1、内容:
多线程、网络编程
2、创建线程启动线程
启动线程:
AextendsThread
newA().start();
3、知道线程的排斥(synchronized——加锁),协作(wait、notify)
4、基于TCP的编程(ServerSocket、Socket):
过程:
客户端创建Socket对象(指定IP和端口号)服务器创建ServerSocket对象(从客户端获得端口)服务器接收客户端信息(accept())输入输出交换
2012年2月21日
1、贪心算法:
2012年2月22日
1、回朔法
2012年2月23日
1、讲解试题:
(1)产生随机数:
newRandom().nextInt(整数)
或Math.random()
(2)
importjava.io.*;
publicclassEx2{
/**
*@paramargs
*@throwsIOException
*问题:
*如何把键盘输入的3进制数字转换为十进制。
*三进制数就是只由1和2两个数字组成的数
*/
publicstaticvoidmain(String[]args)throwsIOException{
//TODOAuto-generatedmethodstub
/*BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
Strings=br.readLine();*/
//调用已经做好的类方法
//格式:
类型变量=new封装类名称().封装方法;
Strings=newEx03().ioin();
intn=0;
for(inti=0;i{
if(s.charAt(i)<'0'||s.charAt(i)>'2')thrownewRuntimeException("Formaterror");
n+=(s.charAt(i)-48)*(int)(Math.pow(3,s.length()-i-1));//三进制转换十进制关键所在
}
System.out.println(n);
}
}
(3)
importjava.util.*;
publicclassEx1{
/**
*@paramargs
*问题:
*在ABCDEF六人中随机抽取3人中奖,要求中奖人不能重复。
*/
publicstaticvoidmain(String[]args)
{
Vectora=newVector();
for(chari='A';i<='F';i++)a.add(""+i);//将所有的字符都添加到集合a中
//将'A'转换为了字符串"A",同样方法,可以将整形1转换为"1":
a.add(""+i)
for(intk=0;k<3;k++)
{
intd=newRandom().nextInt(a.size());//从六个字母中随机产生
System.out.println(a.remove(d));//d为下标
}
}
}
(4)用类里面的方法得到进制的转换:
十进制转换为二进制:
Integer.toBinaryString(x)
二进制转换为十进制:
Character.digit(x,2);
十进制转换为八进制:
Integer.toOctalString(x)
八进制转换为十进制:
Character.digit(x,8);
十进制转换为十六进制:
Integer.toHexString(x)
十六进制转换为十进制:
Character.digit(x,16);
十进制转换为其他进制都是用Integer里面的方法。
而其他进制转换为十进制用Character里的digit方法
(5)类型转换:
整数转换为字符串数值:
Integer.toString(x);或:
String.valueOf(x);
字符串数值转为整形:
Integer.parseInt("字符串值")或Integer.valueOf(“字符串值”);
(6)计算代码程序执行时间:
(newSimpleDateFormat("HH:
mm:
ss")).format(newDate())
2、复习基础知识:
(1)输出26个字母:
publicclassTest1{
/**
*@paramargs
*@throwsIOException
*问题:
*生成连续字母的程序
*/
publicstaticvoidmain(String[]args)throwsIOException{
//输出数组元素是a[i]形式,而不是a
chara[]=newchar[26];
for(inti=0;ia[i]=(char)('A'+i);//大写输出
//a[i]=(char)('a'+i);//小写输出
System.out.print(a[i]);
}
}
}
2012年2月24日(最后一天)
1、经典算法:
(1)递归算法:
斐波数列:
下标为n的数是多少?
publicclassTest2{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
System.out.println(f(5));
}
//staticlonga[]=newlong[51];//优化
staticlongf(intn){
if(n<=1){
return1;
}else{
//a[n]=f(n-1)+f(n-2);优化
returnf(n-1)+f(n-2);//递归算法
}
}
}
(2)动态规划算法:
(3)贪心算法:
(4)回溯法
2、基础练习:
(1)枚举类型:
enumtest{one,two}//定义一个名称为test的枚举类型(里面数据是有序的)
publicclassTest2{
/**
*@paramargs
*枚举类型举例
*定义格式:
*enum名称{有序数据}
*是定义在类体外面且程序头部
*/
publicstaticvoidmain(String[]args){
switch(test.one){
caseone:
{
System.out.println("所执行的分支是caseone分支!
");
break;
}
casetwo:
{
System.out.println("所执行的分支是casetwo分支!
");
}
default:
System.out.println("其他分支!
");
}
}
}
(2)
3、注意:
布尔值的默认值为false,
4、将集合里的每个元素转换为String类型:
importjava.util.*;
publicclassTest3{
/**
*@paramargs
*/
publicStringn="100";
staticStringstr;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Test3t=newTest3();
ArrayListal=newArrayList();
//ArrayListal=newArrayList();
for(inti=0;i<3;i++){
al.add(t.n);
str=(String)al.get(i);
//str=al.get(i);//集合定义为泛型后就不用强制类型转换,会自动转换
System.out.print(str+"");//输出:
100100100
}
}
}
2012年2月25日星期六
一、类集
1、类集就是一个动态的对象数组
2、掌握三个接口:
(1)Collection:
Collection下存放的就是一个个对象,每次存放单个对象;
子接口:
List、Set
Map:
每次存放一对值:
keyvalue
Iterator:
输出接口,只要是集合都要去使用iterator输出