Java2游戏编程读书笔记第四章参考答案
来源:互联网 发布:网络投票怎么刷票软件 编辑:程序博客网 时间:2024/05/16 08:29
4.1写出保存一个链表顺序的代码。(提示:Java LinkedList是FIFO结构——哪些类具有LIFO结构?)
答:
import java.util.*;
class LinkedTest41{
public static void main(String[] args){
LinkedList l=new LinkedList();
System.out.println("==================================================");
System.out.println("add与get方法配合使用:");
System.out.println("==================================================");
for(int i=0;i<10;i++){
//直接将指定元素追加到此列表的结尾。
l.add(i);
//返回此列表中指定位置处的元素(并未移出链表)。
System.out.print(l.get(i)+" ");
}
System.out.println("/nSize:"+l.size());
System.out.println("/n/n/n==================================================");
System.out.println("addFirst与getFirst方法配合使用:");
System.out.println("==================================================");
for(int i=0;i<10;i++){
//将给定元素插入此列表的开头。
l.addFirst(i);
//返回此列表的第一个元素(并未移出链表)
System.out.println(l.getFirst());
}
System.out.println("/nSize:"+l.size());
System.out.println("/n/n/n==================================================");
System.out.println("addLast与getLast方法配合使用:");
System.out.println("==================================================");
for(int i=0;i<10;i++){
//将给定元素追加到此列表的结尾。
//(与 add 方法功能相同;包括它只是出于一致性考虑。)
l.addLast(i);
//返回此列表的最后一个元素(并未移出链表)
System.out.println(l.getLast());
}
System.out.println("/nSize:"+l.size());
System.out.println("/n/n/n==================================================");
System.out.println("removeFist方法测试");
System.out.println("==================================================");
for(int i=0;i<10;i++){
//移除并返回此列表的第一个元素。
System.out.println(l.removeFirst());
}
System.out.println("/nSize:"+l.size());
System.out.println("/n/n/n==================================================");
System.out.println("removeLast方法测试");
System.out.println("==================================================");
for(int i=0;i<10;i++){
//移除并返回此列表的最后一个元素。
System.out.println(l.removeLast());
}
System.out.println("/nSize:"+l.size());
System.out.println("/n/n/n==================================================");
System.out.println("remove方法测试");
System.out.println("==================================================");
for(int i=0;i<l.size();i++){
//找到并移除此列表的头(第一个元素)。
System.out.println(l.remove());
}
System.out.println("/nSize:"+l.size());
}
}
这段程序比较有趣的是:最后一个for循环中,在移除用add添加的的元素时,只能移除一半,不知道是什么原因。
4.2练习4.1的代码会不会与保存一个StringBuffer对象的内容有很大的不同?
答:不太明白这个题目想表达的意思。
4.3写一个工具类,封装BufferedReader类,并从键盘读入不同类型的信息,如float值,int值,boolean值等。可以写如readInt,ReadFloat等的方法,确保每个组件只接收有效的输入,并且在输入值不正确时提示用户重新输入数据。
import java.io.*;
/**
*写一个工具类,封装BufferedReader类,
*并从键盘读入不同类型的信息,如float值,int值,boolean值等。
*可以写如readInt,ReadFloat等的方法,确保每个组件只接收有效的输入,
*并且在输入值不正确时提示用户重新输入数据。
*/
class BufferedReaderToolkit{
private static BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
public static int readInt(){
try{
String strTemp=br.readLine();
return Integer.parseInt(strTemp);
}catch(IOException e){
System.out.print("输入有误,请重输:");
return readInt();//使用递归调用来完成重输
}catch(NumberFormatException e){
System.out.print("数据格式有误,您是不是输入了字母?请重输:");
return readInt();//使用递归调用来完成重输
}
}
public static float readFloat(){
try{
String strTemp=br.readLine();
return Float.parseFloat(strTemp);
}catch(IOException e){
System.out.print("输入有误,请重输:");
return readFloat();//使用递归调用来完成重输
}catch(NumberFormatException e){
System.out.print("数据格式有误,您是不是输入了字母?请重输:");
return readFloat();//使用递归调用来完成重输
}
public static boolean readBoolean(){
try{
String strTemp=br.readLine();
return Boolean.parseBoolean(strTemp);
}catch(IOException e){
System.out.print("输入有误,请重输");
return readBoolean();//使用递归调用来完成重输
}catch(NumberFormatException e){
System.out.print("数据格式有误,您应该输入/"true/"或/"false/"?请重输");
return readBoolean();//使用递归调用来完成重输
}
}
}
class BufTest{
public static void main(String[] args){
System.out.println("请输入一个整数:");
System.out.println("您输入了:"+BufferedReaderToolkit.readInt());
System.out.println("请输入一个小数:");
System.out.println("您输入了:"+BufferedReaderToolkit.readFloat());
System.out.println("请输入一个boolean数:");
System.out.println("您输入了:"+BufferedReaderToolkit.readBoolean());
}
}
这个题目做完了,发现boolean值不会出现数据格式异常。除了字符“true”之外,其余字符均转为“false”。
4.4写一个程序(使用BufferedReader类),从名为file.txt的文件读入Strings。Reader应该连续地读遍全文件。文件输入应该立即改变到标准输出。文件不存在或打不开时输出一个错误消息。(提示:使用java.io包中的FileReader类)
import java.io.*;
class FileReaderTest{
public static void main(String args[]){
try{
BufferedReader fr=new BufferedReader(new FileReader(new File("file.txt")));
String strTemp;
while((strTemp=fr.readLine())!=null){
System.out.println(strTemp);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
4.5重写Fibonacci程序,使用Java.util包提供的Timer和TimerTask类。建议保持Fibonacci类框架,但是用一个匿名内部类来做定时。
import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;
//计算并打印Fibonacci数列的Thread,并利用Timer类来控制时间
public class TimerFibonacci{
//数列中的前一个数
private long previous;
//数列中的当前数
private long current;
//构造一个新的Fibonacci数列
public TimerFibonacci(){
previous=1;
current=1;
}
private void printNext(){
System.out.print(current+", ");
}
//计算数列中的下一个数,它是数列中前两个数的和
private void update(){
long temp=current;
current=previous+current;
previous=temp;
}
public void execute(){
Timer t=new Timer();
t.schedule(new TimerTask(){//使用匿名类重写TimerTask
int count=0;
public void run(){
//打印数列中的前两个数字
if(count==0){
printNext();
printNext();
count++;
}
update();
//只要当前的数列值超过了最大的long型数值,它就会截断为负数
//只要当前值为负数就终止这个线程的执行
if(current<0L){
System.out.println("/n已达长整型值极限!线程消毁...");
return;
}
//打印下一个Fibonacci数
printNext();
}
},new Date(),1000L);//要写三个参数的schedule才行。
//第一个参数:要执行的任务
//第二个参数:任务开始的时间
//第三个参数:任务重复的间隔时间
}
public static void main(String[] args){
new TimerFibonacci().execute();
}
}
//本程序有一个bug当增加到型值的极限的时候,无法将时间停止
第一次使用Timer,发现它的用处还是蛮大的,似乎可以用来做一个任务管理器,等以后有时间,来试试
- Java2游戏编程读书笔记第四章参考答案
- Java2游戏编程读书笔记(第五章练习参考答案)
- Java2游戏编程读书笔记(1)
- Java2游戏编程读书笔记(6)
- 控制台版21点(BlackJack)源码(Java2游戏编程第4章练习参考答案)
- Java2游戏编程读书笔记(4-1)
- Java2游戏编程读书笔记(4-2)
- Java2游戏编程读书笔记(5-1)
- Java2游戏编程读书笔记(5-2)
- Java2游戏编程读书笔记(8-2)
- Java2游戏编程读书笔记(9-1)
- Java2游戏编程读书笔记(9-2)
- Java2游戏编程读书笔记(10-1)
- Java2游戏编程读书笔记(10-2)
- Java2游戏编程读书笔记(11-1)
- Java2游戏编程读书笔记中的源码错误
- Java2游戏编程读书笔记(11-2)
- Java2游戏编程读书笔记(11-3)
- CSS语法荟萃总结
- 一个简单的hibernate实例(之二)
- GNU Make 使用手册(中译版) 第2部分
- c语言的setjmp和longjmp
- javascript 汇总
- Java2游戏编程读书笔记第四章参考答案
- C/C++通用面向对象接口
- intelliFlow工作流系统可以支持复杂组织机构中的任务分派要求
- 当爱成为往事
- JavaScript技术讲座(一)——概况
- JavaScript技术讲座(二)——基本数据结构
- JavaScript技术讲座(三)——程序构成
- 第四讲 基于对象的JavaScript语言
- Context容器