返回列表 发帖

《Java入门123》一书修订2013年5月2日更新

欢迎大家指出错误和不足。
以下是发现的一些错误之处,希望对大家学习有帮助。
下载:http://pan.baidu.com/share/link?shareid=497428&uk=2720973131
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

好的。我找书确认一下。
在网上购买本书的读者,请给本书发一个好评。谢谢大家。

TOP

第二版103页
http://www.wanjuanchina.net/book ... ntScripComplex.java
代码第32行中,if语句的表达式里面的变量名错误:
int amount = Integer.parseInt(reader.readLine());
if (price < 0) {
        System.out.println("商品数量不能小于0!");
        hasMoreGoods = 1;                // 赋值1,确定下次肯定会循环
        continue;
}

应该为if (amount < 0)

TOP

回复的都是好孩子,顺便学习一下

TOP

58# deepnighttwo


我刚刚试了一下,用final修饰了value变量后isqueals2就是true了
是不是可以理解为"若为固定值即可指向同一对象"呢?

TOP

学到第九章中使用==判断两个引用是否指向同一对象这里有点疑问
int value = 1;
String str1 = "ABC" + 1;
String str2 = "ABC" + 1;
String str3 = "ABC" + value;
String str4 = "ABC" + value;
boolean iseq ...
cardseri 发表于 2011-11-19 17:58

这个就涉及到Java虚拟机对字符串的处理了,"ABC" + 1,这个1是个literal的值,不会改变,所以Java虚拟机中编译的时候,会做一些优化,让str1和str2指向同一个string对象。因为Java中的string对象是immutable的,所以这样是没问题的。
而"ABC"+value,这个value是个变量,随时可能变化,所以Java编译器不去做优化,而在运行时,JVM会创建俩string对象。

TOP

请问:非默认包的类是不是无法使用import引入默认包里的类?
我在网上找了一下有说"无package语句的类就无法被其他类所引用"
不知是不是这样?
cardseri 发表于 2011-11-18 16:30

默认包中的类也是可以使用的,但是真正的项目中不建议使用默认包。默认包中的类不需要使用package来import。但是要保证classpath正确设置了。

TOP

本帖最后由 cardseri 于 2011-11-19 18:01 编辑

学到第九章中使用==判断两个引用是否指向同一对象这里有点疑问
int value = 1;
String str1 = "ABC" + 1;
String str2 = "ABC" + 1;
String str3 = "ABC" + value;
String str4 = "ABC" + value;
boolean isequals1 = (str1==str2);
boolean isequals2 = (str3==str4);
在这里isequals1值为true , isequals2值却为false
看似好像懂可以又觉得不懂,不知能否帮忙解释一下呢,

TOP

请问:非默认包的类是不是无法使用import引入默认包里的类?
我在网上找了一下有说"无package语句的类就无法被其他类所引用"
不知是不是这样?

TOP

另外:
public void raiseSpeed(byte p_speed){
            if (p_speed < 0){
                    System.out.println("p_speed的值小于0,raiseSpeed()方法将结束");
                    return;
            }int currentSpeed = speed + p_speed;
   ...
cardseri 发表于 2011-11-10 22:13



这个问题涉及到直接数字的默认类型。在Java中,如果直接数值是整数,比如1,3,-7这种,都是被认为是int类型的,所以传递1为参数调用的是int为参数的方法。
如果是浮点数,比如1.2,3.5,-7.9这种都是被默认认为是double类型的数值。

如果需要改变它们的类型,则需要使用基本类型的类型转换。这个书中有介绍。

TOP

另外:
public void raiseSpeed(byte p_speed){
            if (p_speed < 0){
                    System.out.println("p_speed的值小于0,raiseSpeed()方法将结束");
                    return;
            }int currentSpeed = speed + p_speed;
            speed = currentSpeed;
    }
public void raiseSpeed(int p_speed){
            if (p_speed < 0){
                    System.out.println("p_speed的值小于0,raiseSpeed()方法将结束");
                    return;
            }int currentSpeed = speed + p_speed;
            speed = currentSpeed;
    }

此段代码里我参数赋值1的话还是会去执行int的方法
按照书中所写的重载中参数类型匹配原则的话,不应该是byte吗?

TOP

自己推翻上楼所说,错了.原来那样是对的,抱歉..

TOP

发现一处比较让我抓头的错误
7.10.1章节里第188页的代码里其中一段
public void CarStatus getAnotherCarStatus(Car anotherCar){
    if(!isTrafficAdmin){
                    //如果当前的车不是TrafficAdmi ...
cardseri 发表于 2011-11-10 18:44



补充一下,又发现一个,在同一个例程内
public booleanisLegalCarStatus(CarStatus status){
    if(status.speed <= 80){
        return true;
        }else {
        return false;
}

此处表达错误,小于等于80速度就返回true,应该是大于等于80才返回true吧?
要么是把小于改成大于,要么true和false互换一下.
不知道是不是这样?

TOP

发现一处比较让我抓头的错误
7.10.1章节里第188页的代码里其中一段
public void CarStatus getAnotherCarStatus(Car anotherCar){
    if(!isTrafficAdmin){
                    //如果当前的车不是TrafficAdmin,则打印出错误信息并结束本方法
        anotherCar.speed = 0;
        }
        Carstatus status = new CarStatus(anotherCar.speed , anotherCar.direction);
        return status;
}

本段方法里的if语句里应该是错误的吧?应该改正为
if(!isTrafficAdmin){
                    System.out.println("你不是交通管理员,无权调用此方法");
                    return null;
            }
不知道return null是不是正确的?因为要返回一个值,直接写return不行.
如果不是null的话应该要返回什么?

TOP

48# xwfwsh


谢谢大家的支持。

TOP

返回列表