首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > Java2游戏编程读书笔记第四章参考答案
【标  题】:Java2游戏编程读书笔记第四章参考答案
【关键字】:Java2
【来  源】:http://blog.csdn.net/mouyong/archive/2006/12/29/1467657.aspx

Java2游戏编程读书笔记第四章参考答案

 
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,发现它的用处还是蛮大的,似乎可以用来做一个任务管理器,等以后有时间,来试试
 
Hacking Diablo II之D2HACKIT技术详解:【上一篇】
pc中的时间:【下一篇】
【相关文章】
  • Java2游戏编程读书笔记(4-2)
  • Java2游戏编程读书笔记(4-1)
  • JAVA23种设计模式的代码
  • 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习...
  • 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习...
  • Java2游戏编程读书笔记(1)
  • 追MM与JAVA23种设计模式
  • JAVA2十大经典图书
  • Java2下Applet数字签名具体实现方法
  • WSDL2Java 与 Java2WSDL
  • 【随机文章】
  • 恶意网页修改注册表的十二种现象及解决办法
  • VC wizard出错: Parsing error : Expected "*/" 的原因
  • AIX常见问题整理 (5)
  • shell 语法
  • Flash MX总览3
  • 怎样制造Linux?
  • 【原创】Liferay Portal二次开发指南(11)
  • VB中访问API函数之防错技巧
  • 一封写给MM学习linux的信(具有指导意义,抄录)
  • 实例编程:用VC写个文件捆绑工具
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.