手机站
网通分站
电信主站
密 码:
用户名:
热门关键字:  虚拟主机  cn域名  域名注册  非法  seo
当前位置 : 主页>程序设计>Java技术>列表

Java游戏编程读书笔记(2)

来源:互联网 作者:west263.com 时间:2008-02-23 点击:
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

答:本人没怎么用过C ,所以也说不清楚。不过本人使用过C,所以对于不允许布尔值到任何整数类型进行转换的优势还是有所感悟。
在C中,由于不存在布尔值,所以,它是以0代表假,非0代表真。于是在下面的两循环中就会发生完全不同的效果。
(1)while(i==1){}(当i的值为1时才循环)
(2)while(i=1){}(死循环)
两者的不同在于:在(1)中,计算机首先计算逻辑表达式i==1的值,之后判断这个值是0还是1,显而易见,只有当i为1时,逻辑表达式i==1才会返回1,循环才会进行。
而(2)中的,计算机同样首先计算i=0的值,而i=1是一个赋值语句,这样,不论之前i的值是多少,第-:i会被修改为1,第二:表达式i=1将返回i的值,也就是整数1,计算机将1转换为逻辑值“真”看待,那么就将出现一个死循环。
而在java中,因为有了布尔值,并且布尔不能转换为逻辑值,于是(2)将会报数据类型错误,这样,可以大大避免我们程序员(特别是初学者)犯下无意中写出死循环的情况。
6. (稍难)写一个程序,使之创建一个“无规则”数组,包含帕斯卡三角形前5行的所有值,并把它打印到屏幕上。你可以很努力地编出这些值,但是对于奖励分值,试着从算法中得到。输出应当如下所示,不是必须居中。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
7. 请解释比较两个String对象为什么与比较同一原始数据类型的两个值不同。写一个比较两个String对象并打印出结果的小测试程序。
8. 如果熟悉如DirectX的图形包,试着写一个用移位操作构造32位颜色的程序。颜色以ARGB规则显示,也就是说,每个alpha、红、绿、蓝均为8位(值为0~255)。使用Integer.toHexString方法把颜色值的结果以16进制输出。
9. 下面的程序用种子21创建一个随机对象,它会把产生器的下一个在[0,1000000)范围内的整数值保存到n。
import java.io.*;
import java.util.*;

public class RandomExercise
{
public static void main(String[] args)
{
Random r=new Random(21);
int n=r.nextInt(1000000);
System.out.println(“number to generate is ” n);

//your code goes here
}
}
完成上面的程序,使之对用同一个随机数产生器、同一个传送到nextInt方法的参数而再次生成相同数字的n的次数进行计数,并把结果打印到屏幕上。(提示:程序每运行122963次总会再次找到相同的数字,为什么?)
10. 声明一个关于Point对象的二维数组(不要忘记引入java.awt.Point),如下:
Point[][] points=new Point[10][10];
现在写一个循环来填充每个Point元素,用下标(i,j)以及i和j的值。这里需要两个循环,一个为行一个为列。实际创建每个Point对象的代码应当如下所示:
points=new point(i,j);
11. 讨论从无限循环中跳出的一些方法,如下:
while(true)
{
//program code here
}
这种结构的固有的危险是什么?能否做防护使这种结构不会总是危险的?
12. 这章中没有讨论的主题之一是递归。递归算法用分解成更简单的一些问题的方法来解决复杂的问题。递归方法的工作方式是在到达一个基本状态之前多次调用自己。在找到基本状态后,向上返回到每个调用方法。这里不研究递归如何工作的“奇妙”,不过可以看一个简单的例子。
任何给定数字n的阶乘,如下定义:
n!=n*(n-1)*(n-2)*…*1
所以,5=5×4×3×2×1=120。读者可以写一个递归计算阶乘的方法,如下:
public int factorial(int n)
{
if(n==0||n==1)
{
return n;
}

return n*factorial(n-1);
}
注意这个方法在找到基本状态,即n是0或1之前,是如何重复调用自己的。每一个对factorial的调用能够把自己的答案传送给调用它的相应的factorial。最终,过程返回到最初的调用并得到正确的值。
试着写一个程序,使用上面的方法,看看是否清楚它的工作过程。打印出每一个对facorial的调用的值可能会使情况变得清晰。接下来试着用非递归(重复)的方式写相同的程序。进一步地,解释在哪种情况下,上面的代码会失败以及如何来修复它。
13. 设想你准备写一个计算器程序,可以计算普通的算法表达。下面是这个程序的运行例子,用户想对两个数进行除运算:
Enter the numerator: 67
Enter the denominator: 13

67/13=5.1538463
解释什么样的条件可能会引起要抛出的异常,假设用户的输入都是有效的数字。对于处理算术异常而言,可能比try-catch块更好的方法是什么?
14. 描述整数左移和右移与乘法和除法在对相同数字的操作上有怎样的关联。假设移位操作比乘除法快,描述移位运算可能派上用场的一些情况。
答:左移相当于乘二,右移相当于除二。能派上用场的地方很多,不过我一时想不起来了。

上一篇: 自我参考:Java学习的30个目标
下一篇: Java如何操作Word, Excel, PDF文档?

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

共3页: 上一页 [1] [2] 3 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名
注册