标签:
1.学会了```的用法 一开始并没有成功,后来发现是因为输入法没有切换成英文,今后这样的问题要避免出现。——20145106
2.问题:教材86页,Guess的代码,猜数字,不知道原先没有设定好一个数字,为什么可以在0-9之间猜中一个数
解答:百度了(Math.random()10)这行代码的意思,知道了(Math.random())的意思是在[0,1)之间随机产生一个数字,10,所以变成了[0,10)之间随机产生一个数字,所以可以进行猜数字
——20145123
3.IntegerCache.low默认值是-128,IntegerCache.high默认值是127(这不是出现得问题,但是一度记错范围)——20145123
!!!4.问题:true和false的判定,不能正确的根据代码判断出是ture还是false,这个问题目前还没解决——20145123
5.问题:%2d的意义
解答:百度得知输出为2位的固定位宽——20145123
6.看书上的注释只知道new int[2][]是声明arr参考的对象会有两个索引,但是长度不同的数组时怎么排列的不是很明白。看下面的循环语句应该是将两个已定义长度数组的值从行到列排序然后输出他们的值。——20145122
!!!7.不太理解为什么要进行基本类型打包,基本类型打包有什么作用?——20145120
8.
对1到100那个程序的运行结果截图的时候因为结果太长,很难截图,感觉应该是有结果自动换行功能的,找了一下,发现了应该是自动换行按钮的东西
还有显示代码行数的功能
——20145120
9. 在第四章的学习中,我在浮点数精确度的部分有些纠结,在判断运算结果时总会出错...Java中浮点数默认为double类型,且Java遵守IEEE?754浮点数运算规范,使用分数与指数来表示浮点数!!(即使程序中显示的是0.1,但实际内部表示为1\10!)
以后若想要得到"字面上的结果",需要使用标准类java.math.BigDecimal
?
(标准API由许多类组成,可以直接取用以免去重新打造基础的需求,一般包名称为java开头的类,表示标准API提供的类.)
——20145118
10.
一个 *.java 文件中,只能有一个public 的类,而且这个public修饰的这类必需要和这个文件名相同
问题出在文件命名上,应该命名为Sum.java
——20145110
11.书中P121的操作题1,是一个关于费氏数列的问题。其中用到了数组和java.util.Scanner.
代码如下:
import java.util.Scanner;
?
public class Fei1 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.printf("求几个费氏数?");
int n=s.nextInt();
int arr[] = new int[n];
arr[0] =0;
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 1] + arr[i - 2]; }
System.out.printf("斐波那契数列的前%d项如下所示:",n);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); }
}
}
截图如下所示:
不过所显示的结果是一行一个,看上去并不美观,不知道如何修改。希望老师能够指导。
肖昱学长的解答:
关于斐波那契数列:println自带换行,改成print然后字符串后面加个空格就好了。
——20145110
12.
在看书的过程中,作者提到这样的一个例子:
String text1 = "Ja"+"va";
String text2 = "Java";
System.out.println(text == text2);
当时没有继续往下看时,以为会输出false。但答案是true。后来作者通过反编译解释了这个问题。
"+"是链接字符,并不是新产生的字符串。
所以在学习过程中,各程序语言会有细微、重要且不容忽视的特性。在学习程序语言是,不得不慎。
——20145201
?
13.不知道p100、p102的代码中System.out.println()的意思。
解决过程:我进行了一下尝试:
我发现加上这句话的执行结果和书上是一样的。如果不加这句话,执行的结果就是这样的:
这是什么原因呢?难道这句话的作用仅仅是空格的作用?
娄老师回复:换行看不出来?(这句话就是换行的意思!)
——20145203
!!!14.调试代码的时候,我不明白这个代码为什么i++最后输出的结果会是10:
解决过程:我问了几个同学他们也对这个问题不太理解。只能理解为输出的时候还未进行++运算!
——20145203
!!!15.关于自动拆箱与装箱的问题
"建立Integer时,使用Integer.valueof()。用这种方式建立实例,如果传入的int在IntegerCache.low与IntegerCache.high之间,就会看缓存中有没有打包过相同的值,如果有就会直接返回,如果没有就会用new建立新的实例。"
那么Integer i1=100;Integer i2=100;这相当于Integer i1=100;Integer i2=i1;那i1和i2有什么意义吗?同一个对象i2改变,那么i1也会改变啊?仅仅是为了比较数值大小吗?
——20145204
!!!16.还是有些不太清楚什么时候用printf、print、println,只知道println不仅可以输出还可以直接换行,在P85代码中,输出使用了println运行结果出现错误。
解决过程:还没有解决。
——20145206
!!!16.在编写代码的时候出现了一个没有解决的问题。
public class Average {
public static void main(String[] args) {
long sum = 0;
for (String arg:args){
sum +=Long.parseLong(arg);
}
System.out.println("平均:"+(float)sum/args.length);
}
}
上述代码的运行结果是
结果是NAN,这不是我想得到的,在网上查到NAN代表not a number,是因为程序中没有给定参数值的原因,但是我想按照书上的方法对其赋予参数变量,却提示无法找到相应的类,这个问题我研究了一会还是没有解决。
——20145208
17.p108 Sum.java:输入11.1试试,会是什么效果?如果有问题怎么解决?
输入了11.1之后出现了错误如图
阅读之后发现是因为参数定义的是整型,所以只需要修改为浮点数就可以了,代码如下:
import java.util.Scanner;
?
public class Sum {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
float sum=0;
float number=0;
do {
System.out.print("输入数字:");
number=Float.parseFloat(scanner.nextLine());
sum+=number;
}while (number!=0);
System.out.println("总和:"+sum);
}
}
结果如图,果然可以了:
——20145208
18.p85 Field2.java: 构造方法的使用,构造方法决定了生成对象的方式
按照教学指导上面说的加了一行加一行Clothes2 autumn = new Clothes2();发现不能运行;
原因是实际参数列表和形式参数列表的长度不同,就是新加的一行与形式参数长度存在差异。
——20145208
19.在代码编译中我遇到了GBK码的一些问题,一些包含汉字的文件我在IDEA是可以正常的运行,但是在cmd上运行就会出现错误,下面是任务日志的内容:
然后我通过上网查找相应的解决方案,发现应该是文件编码方式的问题,只要改成如下方式就可以正常编译运行了:
——20145208
20.问题:
对教材P93页的两段代码不是很理解,"=="什么时候能看做是指定参考名称到某个参考对象?
解决:
通过不断翻阅之前的知识点,我对这两段代码的理解如下:之前的代码没有经过打包,这两段代码因为有"Integer"进行打包,所以看作指定参考名称到某个参考对象,在这两段代码中,两个参考名称的两个对象虽然内含值相同,但是两个对象打包后,若i在IntegerCache.low和IntegerCache.high之间,会从缓存中传回Integer实例,第一段代码中,因为i1,i2的值相等,所以从缓存中传回的是同一个实例,但第二段代码中,i在IntegerCache.low和IntegerCache.high之外,直接建立新的 Integer实例,新建立的实例虽然内含值相同,但并不是同一个实例。
——20145210
21.问题:
在学习第五章的时候没有办法区分函数和方法
解决:
上网查了下资料,理解了java里方法和函数的异同:二者本质上是一样的,在java中一般把类里面的函数叫方法,主要强调这个类的对象封装了一些属性和方法,并向外提供服务
——20145210
22.问题:
在IDEA里敲代码的时候,会编译不通过,出现以下问题:
解决方案:
之前一直是把public去掉,这样也能运行,但是通过对第四章的学习,知道了一个原始码中可以有多个类定义,但只能有一个是公开类,且文档中的主文档名必须与公开类名称相同,之前操作时一直在同一个主文档里操作,导致主文档名与公开类名不相同,现在每次编写程序都会新建一个文档,问题解决了。
——20145210
23.问题:
这周做了一下书后的操作题,在编写费氏数列的程序时,运行出现了"可能尚未初始化变量"
解决方案:
果然看书看懂了和练习不一定能做好,因为对C语言进行过很多练习,在编写程序的时候把C语言初始化变量的语法用在java里了,更改后的代码如下:
import java.util.Scanner;
?
public class Fibonacci {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n;
Integer[] f = new Integer[100];
f[0] = new Integer(0);
f[1] = new Integer(1);
System.out.print("求几个费式数?");
n = Integer.parseInt(scanner.next());
if(n == 0||n == 1){
System.out.printf("%d",n);
}
else if(n > 1){
for(int i = 0;i < n;i++){
if(i > 1) {
f[i] = f[i - 1] + f[i - 2];
}
System.out.printf("%3d",f[i]);
}
}
}
}
运行结果如下:
——20145210
24. 代码调试中的问题和解决过程
这个代码我照抄教材,然而却执行失败,很费解。我也想知道为什么这个代码没有公开类
?
class CashCard{
String number;
int balance;
int bonus;
CashCard(String number,int balance,int bonus){
this.number = number;
this.balance = balance;
this.bonus = bonus;
}
void store(int money){
if(money >= 0){
this.balance += money;
if(money >= 1000){
this.bonus++;
}
}
else{
System.out.println("储值是负的?");
}
}
void charge(int money){
if(money >= 0){
if(money <= this.balance){
this.balance -=money;
}
else{
System.out.println("钱不够啦");
}
}
else{
System.out.println("扣负数?这不是叫我储值吗?");
}
}
int exchange(int bonus){
if(bonus >= 0){
this.bonus -= bonus;
?
}
return this.bonus;
}
}
高其解答:
对于你的问题,我的理解是,这个CashCard类的代码本身是没什么大问题,首先这不是因为没有公开类而执行失败,这个代码在编译中不会报错,执行时就会报错,因为缺少main方法,没有main方法,JVM就找不到程序的入口,所以不能被执行。结合课本的内容不难发现,这个代码就是对象封装的典型实例,是用来和这个CardApp公开类一起使用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24? | import?java.util.Scanner; ? ? public?class?CardApp { ? ? ????public?static?void?main(String[] args) { ????????Scanner console =?new?Scanner(System.in); ? ? ????????CashCard card1 =?new?CashCard("A001",?500,?0); ????????card1.store(console.nextInt()); ? ? ????????CashCard card2 =?new?CashCard("A002",?300,?0); ????????card2.store(console.nextInt()); ? ? ????????CashCard card3 =?new?CashCard("A003",?1000,?1); ????????card3.store(console.nextInt()); ? ? ????????System.out.printf("明细 (%s, %d, %d)%n", ????????????????card1.getNumber(), card1.getBalance(), card1.getBonus()); ????????System.out.printf("明细 (%s, %d, %d)%n", ????????????????card2.getNumber(), card2.getBalance(), card2.getBonus()); ????????System.out.printf("明细 (%s, %d, %d)%n", ????????????????card3.getNumber(), card3.getBalance(), card3.getBonus()); ????} }? |
也就是当你编译CardApp类时,JVM会尝试的在同级别文件夹中搜寻CashCard.java文件,从而识别CashCard类类型变量和CashCard类的方法。
所以CashCard类本身是不单独用的,所以没定义main接口(独立运行时会报错),只是用于CardApp类的调用。
——20145213
——20145214
26.问题:在调试使用java.util.Scanner的代码中打印提示语"猜数字"及"猜中了"时出现错误。
——20145214
27.问题:尝试运行书本137面ObjectInitialBlock.java代码时出现错误。
?
——20145214
28.教材上109页的Average代码运行完成后,结果如下:
一开始并不知道NaN是什么,后来百度后发现NaN是not a number的缩写,在IEEE浮点数754中定义,表示一些特殊数值(无穷与非数值),本题中没有输入,自然也就没有数值了。
——20145215
29.在对课本上109页Average代码进行编译时弹出如下错误:
解决过程:通过百度找到了解决方法,首先用记事本打开java源文件,然后另存为,选择ANSI编码,再保存确认覆盖就好了。
30.下面代码无法进行编译:
}
弹出如下错误:
后来发现在用IDEA一开始编代码的时候,系统自动给了public class ObjectInitialBlock,当时没有注意,直接在ObjectInitialBlock类中继续敲代码,所以弹出了类名重复的错误。
——20145215
没有看懂书上p86页代码中的:
int number = (int)(Math.random()*10);
通过上网百度,得到如下解释:
Math.random()是令系统随机选取大于等于0.0且小于1.0的伪随机double值,是Java、js等语言常用代码。
?
例如:Number=Math.random()*2+1,即设置一个随机1到3(取不到3)的变量。
——20145216
由于以前学的for循环语法都是:
for(初始式;执行结果必须是boolean的重复式;重复式){
描述句;
}
所以当看到书上p96页的for循环语法时(具体语句如下),便感到很难理解。
for(int score:scores){
System.out.printf("学生分数:%d %n",score);
}
通过反复看书上的解释和上网查找资料,我知道了该语法是增强式for循环,执行结果其实与以前学的for循环语句相同
?
,但是编写代码时会更简洁方便。其具体执行过程是:上面的程序片段取得scores数组第一个元素,指定给score变量
?
后执行循环体,接着取得scores中第二个元素,指定给score变量后执行循环体,依次类推,直到scores数组中所有
?
元素都访问完为止。
——20145216
当敲到书上p124页的代码时,运行结果有问题,具体代码与错误如下:
经过反复看书中的代码实例与文字解析,我明白了该段代码中调用了函数,而书中给的代码并不完整,缺少构造函数的部分,因此出现如图所示错误,于是,我试着将构造函数的代码片段补上,重新运行,最后运行成功,代码与结果如下:
总结:Java的构造函数语法,能够实现对象初始化流程的封装,封装对象初始化流程的好处是用户不用重复撰写对象初始化流程,甚至不需要知道对象如何初始化,并且只要修改构造函数的内容,重新编译并给予位码文档之后,用户便无须再修改程序。
——20145216
34.问题2:
在敲书上P128页的代码时,发现它与124页的代码有相同的问题,于是我再次补上构造函数的代码,原以为这次会万无一失,结果运行时又出现了一个错误,截图如下:
由于这个错误与之前的错误类似,所以我认为应该也是缺少了某些代码片段,于是我又回归教材,很快我便知道了错误所在,该段代码直接使用了store()方法,而没有定义储值用的store()方法,同样,我加上定义store()方法的代码后,程序便运行成功,截图如下:
——20145216
?
?
?
?
?
35.
课本上的代码敲上去之后却运行不了,出现了上图中的错误。
宋歌解答:
应该是因为你没有class CashCard吧,主程序没有可以调用的CashCard程序。class CashCard就在书上p127最上面。
——20145218
36.
问题:在编译书上p96的Score程序时,我错将System.out.printf("学生分数:%d %n",scores[i])打成System.out.println("学生分数:%d %n",scores[i]),结果弹出来很多错误。在上一章中书上说System.out.printf是按格式输出,而System.out.println是输出后换行,如果仅仅只是换行的差别的话那为什么用后面一种不行呢?我也有试着将输出中的%n删去
,但依旧是错的。
解决方法:还没解决......
对于printf和println的区别,小明在这里有解释
小明:
这主要是因为println是用于输出参数内容,然后换行,其参数个数固定为一个,而printf是用于输出带各种数据类型的占位符的参数,其参数个数是不定的,所以上面的代码应该用printf
?
——20145219
?
刚开始定义类时,将Clothes和Field都定义成public类,一个原始码中可以有多个类定义,但公开类只能又一个,因此将Clothes改为非公开,文件名也修改为Field就可以了。
修改后:
——20145220
38.
输出时习惯性的写成了println,因此出现以下错误,println的参数只能是一个,而printf的参数是不定的,适用于格式化输出的,在其后面加%d(自动回车换行)。
修改后:
?
——20145220
39.运用递归速度变慢的原因是,没一个斐波那契数的生成都需要从fib(n)递归到fib(1),大大影响了代码的运行效率;寒假的代码,则通过数组存储前面每一个值,在进行后续的运算时直接调用即可。所以,一个程序的编写会有多种不同的算法,只有自己试验后,才能判断出代码的好坏,好的保留,坏的改进。
——20145221
——20145222
41.
在编写有关使用java.math.BigDecimal的程序时,我遇到了这样的问题,导致我的程序出现了编译错误:
我仔细检查了一遍,发现并没有什么问题……它告诉我"有if,但是没有else",可是我明明就把else打上去了啊,怎么会没有else?所以我只好求助万能的网络,把出现错误提示的关键字复制下来放到了百度里,结果搜出来发现别人也和我出现了一样的错误。最终我找到了原因,那就是我在if(条件)后面多加了一个分号,去掉分号之后程序就能正常运行了。(编程序真是不能大意啊。)
——20145223
42.一开始我就是直接按书上代码敲上去,后来就编译出错了,说定义类重复,并在"Run"当前代码时将有重复定义类的那个文件也弹出来了,于是我就给类名称后都加上了序号问题就解决了。还有在src的文件中只要有编译不通过的文件,无论它是不是你当前正在"Run"的代码,系统都会给你把那个有错误的文件找出来的
——20145224
43.通过构造方法(构造函数)封装初始化流程时,教材上说构造函数是与类???称同名的方法,不用声明返回类型,但是编译时一直显示"方法声明无效,需要返回类型"。如下图所示:
解决途径:尚未解决。
荆玉茗回答:p128页代码的问题,文件名是CashApp 但public class中的是CardApp~~~~
——20145227
String text1="Ja"+"va";
String text2="Java";
System.out.println(text1==text2);
书中问到这样的代码是false还是true,我刚开始认为是错误,因为觉得两个字符串不能简单相加。但后买才知道最终的结果是true,因为我们的编译程序就是会认为我们要得结果就是"java",也就是说,我们确实可以将两个字符串简单相加。
Integer i1=200;
integer i2=200;
if(i1==i2){
System.out.println("i1==i2");
}
else{
System.out.println("i1!=i2");
}
上面这个代码的结果竟然是"i1!=i2",但我很疑惑,明明都是200,为什么i1就不等于i2呢?后面我知道,自动装箱与拆箱的功能其实是编译程序的蜜糖,它能让我们尝到甜头,但也会让我们看不清代码背后的真理。由于IntegerCache.low默认值是-128,IntegerCache.high默认值是127,所以200在这个范围之外,所以i1与i2不会参考到同一个Integer实例上,也就有了上面的效果。
代码调试中的问题和解决过程
不知道这个代码调试出错是什么意思。
蔡野回答:你的错误是因为在定义sum的时候用了Long关键字,将Long改成long就可以啦~
——20145230
书中代码
Integer i =10;
System.out.println(i+10);
System.out.println(i++);
认为会显示20和11,正确应该是20和10。10会先装箱,然后在i+10时会先对i进行拆箱,再进行加法运算;i++该行也是先对i拆箱再进行递增运算。递增是最后的操作,只有在输出后才会递增的。
代码调试中的问题和解决过程
import java.util.Scanner;
public class Guess
{
public static void main(String[] args)
{
Scanner scanner = new Scanner (System.in);
int number = (int) (Math.random() * 10);
int guess;
?
do
{
System.out.printf("GUESS A NUMBER:");
guess = scanner.nextInt();
}
while(guess != number);
?
System.out.println("YOU ARE RIGHT!");
?
}
}
用import java.util.Scanner使用import告诉编译程序想偷懒
如果没有就会出现编译错误,除非每次都输入java.util.Scanner。在创建Scanner实例时使用System.in输入。
刚开始不太理解其中一些代码函数,查阅资料才知道Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机double值,*10并强制转换成int型,可以生成1~10的随机整数。而guess = scanner.nextInt();要求猜出这个整数,直至猜对会显示"YOU ARE RIGHT!"
书中109的代码不太理解
public class Average{
public static void main(String[] args){
long sum=0;
for(String arg : args){
sum +=Long.parseLong(arg);
}
System.out.println("平均:"+(float) sum/ args.length);
}
}
出现了NaN,Not a Number。NaN 用于处理计算中出现的错误情况。代码中没有输入,所以没有办法计算出所有整数的平均。
——20145232
46.
我的代码在编写的过程中因为对定义的不完全理解,导致了一些错误,就是上面这个==和equals的问题,使得程序无法正确的像我所希望的那样进行,在仔细看书并且重新改写代码之后,程序可以良好的运行。
正确的代码编写:
——20145233
?
47.
代码调试中的问题和解决过程
·有问题的代码如下
public class Averagr {
public static void main(String[] args) {
long sum=0;
for(String arg : args){
sum += Long.parseLong(arg);
}
?
System.out.println("平均:" +(float)sum/args.length);
}
}
出错结果
另一个出错代码
import java.util.Scanner;
public class CashCard {
public static void main(String[] args) {
CashCard[] cards = {
new CashCard("A001",500,0),
new CashCard("A002",300,0),
new CashCard("A003",1000,1),
?
};
?
Scanner scanner = new Scanner(System.in);
for(CashCard card : cards){
System.out.printf("为(%s,%d,%d)储值:",card.number,card.balance,card.bonus);
card.store(scanner.nextInt());
System.out.printf("明细(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
}
?
}
出错结果
不太清楚第一个问题所在
对于第二个代码,出错问题在于public类的名称与书上的文件名不一致,照着书敲代码也不能不经过大脑思考,对照之前自己应该先思考应该写的什么然后在通过书检查正误。
——20145237
?
?
48.
刚开始定义类时,将Clothes和Field都定义成public类,一个原始码中可以有多个类定义,但公开类只能又一个,因此将Clothes改为非公开,文件名也修改为Field就可以了。
输出时习惯性的写成了println,因此出现以下错误,println的参数只能是一个,而printf的参数是不定的,适用于格式化输出的,在其后面加%d(自动回车换行)。
——20145240
Integer i=10;
System.out.println(i+10);
System.out.println(i++);
——20145302
50. 代码调试中的问题和解决过程
1、
class Car {
?
String color = "红色";
int num = 4;
void run()
{
System.out.println(color+".."+num);
}
?
?
}
class Example
{
public static void main(String[] args)
{
Car c = new Car();
c.num=5;
Car c1 = new Car();
c1.color="绿色";
c1.run();
?
}
}
绿色..4
2、
class Car {
?
String color = "红色";
int num = 4;
void run()
{
System.out.println(color+".."+num);
}
?
?
}
class Example
{
public static void main(String[] args)
{
Car c = new Car();
c.num=5;
Car c1 = c;
c1.color="绿色";
c1.run();
?
}
}
绿色..5
上面是两个程序的代码及结果,我觉得特别容易搞混。
第一个是c = new Car();``````c1 = new Car();,由于两个在堆内存中的存放地点不同,所以c并不会影响到c1。
而第二个c = new Car();``````c1 = c;,两个在对内存放的地方是一样的,所以互相会影响。
——20145303
51. 教材学习中的问题和解决过程
代码调试中的问题和解决过程
解决过程:仔细查看代码,发现使用equals()时,少写了s。
解决过程:需要自行输入数字。
——20145304
52. 教材学习中的问题和解决过程
P101页
package cc.openhome;
?
public class IrregularArray {
public static void main(String[] args) {
int[][] arr = new int[2][];
arr[0] = new int[] {1, 2, 3, 4, 5};
arr[1] = new int[] {1, 2, 3};
for(int[] row : arr) {
for(int value : row) {
System.out.printf("%2d", value);
}
System.out.println();
}
}
}
代码中的int[2][]只提供了第一个数值,但是2是两个索引吗还是两个对象
P136页提到的编译程序在处理重载方法时,处理的顺序还不理解
代码调试中的问题和解决过程
P139页中Something(int x)版本的构造函数对final对象成员x设值,但用户调用了Something()版本的构造函数,x不会被设值,所以编译错误。为什么改为一下代码就可以通过编译
class Something {
final int x;
Something(){
this(10);
}
Something(int x){
this.x=x;
}
}
——20145305
关于BigDecimal的精度问题 这种import引用虽然精度高,但因为存在无限循环小数的原因会让循环结构导致程序垮掉,所以还是要用语句让小数点后固定一定的数字。
关于数组内写入数据后循环结构在printf的时候会出现不定对象使结构崩溃的现象。掉换顺序定制数组数目就好了。
——20145307
54. 教材学习中的问题和解决过程
代码调试中的问题和解决过程
class CashCard {
String number;
int balance;
int bonus;
CashCard(String number,int balance,int bonus){
this.number = number;
this.balance = balance;
this.bonus = bonus;
}
}
public class CashApp{
public static void main(String[] args){
CashCard[] cards = {
new CashCard("A001",500,0),
new CashCard("A002",300,0),
new CashCard("A003",1000,1),
new CashCard("A004",2000,2),
new CashCard("A005",3000,3),
};
?
for(CashCard card : cards){
System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
}
}
class CashApp {
String number;
int balance;
int bonus;
CashApp(String number,int balance,int bonus){
this.number = number;
this.balance = balance;
this.bonus = bonus;
}
}
public class CashCard{
public static void main(String[] args){
CashApp[] cards = {
new CashApp("A001",500,0),
new CashApp("A002",300,0),
new CashApp("A003",1000,1),
new CashApp("A004",2000,2),
new CashApp("A005",3000,3),
};
?
for(CashApp card : cards){
System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
}
}
——20145308
这次的代码比较多,所出现的问题也比较多。
上图的原因找了好久,原来是最后一个括号不是英文环境下的括号。
显然大括号与普通括号没有分清。
这个是Score的S小写了。在java中是很严格的区分大小写的。
Import一行也是需要写分号的。
这是因为最后的大括号个数错误、
这也是大小写问题造成的。
同时我还在编写过程中遇到了汉字编码的问题,我打算写一篇博客讨论这个问题。
——20145310
56. 教材学习中的问题和解决过程
代码调试中的问题和解决过程
}
结果如下:
平均:NaN
解决过程:未解决。
——20145312
57. 教材学习中的问题和解决过程
这次学习时,遇到一个问题,浮点类型能不能用 == 进行比较,只知道尽量不要使用 == 对浮点数进行比较。我对这个问题比较好奇,因为当时C语言的时候没有深入探究过,今天就好好研究一次。
首先我们要了解浮点数在计算机中怎么存放的。我百度了一下,上面是这样说的,浮点数普遍的作为实数运算的近似值的计算,是很有用的。
这里说的是实数的近似值的计算,所以浮点数在计算机中其实是一种不精确的表示。它存在舍入(rounding)误差。IEEE浮点标准用符号,尾数和阶码将浮点数的位表示划分为三个字段,单精度为32位,双精度为64位,因为表示方法限制了浮点数的范围和精度,浮点运算只能近似的表示实数运算。而 == 表示的是在计算机中的内存表示完全一样,这样使用 == 来表示两个浮点数的相等就会出现问题了。
代码调试中的问题和解决过程
本次我没有编写自己的代码,都是模仿书上的代码。但是我看见了陈俊达同学所改进的一次代码。即用decimal类型进行devide。结果4除以3,结果无法显示出来。
后来询问过老师后发现,输出时还需要加一个括号,括号中将录入一定的精度,从而才能完成显示。但这种方式实用性不高,这边就不再深究了。
——20145314
课后作业题3(进阶版 冒泡法)
? ? ? ?
? ? ?2. ?运行结果:
? ?
这里因为c语言习惯性思维,认为int[]maopao=new int[5319];即定义出一个可以存储5319个数的空数组,其实是定义了一个含5319个0的数组,所以在输出结果时,for(int jieguo:maopao)因为数组输出结果太多,从而导致了结不能正常输出结果。
? ? ?? 3. ?修改代码:
? ? ? ?
? ? ? ?4. ?运行结果:
修改过后程序就可正常输出结果
——20145319
59. ## 代码调试中的问题和解决过程
xxx
命令提示符中不能显示中文字,后来上网查发现要在Editplus里面设置文件编码为ANSI格式,然后直接保存还是不能正常显示中文,必须重新写一个JAVA程序才能实现。 xxx
## 其他(感悟、思考等,可选)
xxx
第四第五章内容比较多,而且代码好多啊。不过自己一个个的去敲出来并且修改错误还是很有感触,尤其是第五章CashAPP那两个代码,好多细节错误,敲代码还是要很仔细的去看和想。 Xxx
——20145322
60. 教材学习中的问题和解决过程
}
显示结果为
修改后代码为
class UseSome1{
public static void main(String[] args) {
int some1=Some1.sum(1,2,3);
int some2=new Some1().sum(1,2,3);
int some3=Some1.sum(new int[]{1,2,3});
?
System.out.println(some1);
System.out.println(some2);
System.out.println(some3);
}
}
结果为
代码调试中的问题和解决过程
代码调试中,问题不太大。对于P121的操作题2,如果用?1+(int)Math.random()*50+(int)Math.random()*10/3来操作,可以直接表示1~52张不同花色的牌,然后用 Switch 来排列,并用数组记住已经出现过的牌,防止再次出现,可以是可以,但是写的东西会很多;倒是可以用2个 switch 分别装数字和花色,但是,在判断不能重复的时候,却很麻烦,我能想到的就是用数组才存用过的牌,但不知道有没有什么比较简便的 方法可以用来排除使用过的牌,确保使用过的牌不会重复使用。
——20145325
61. 就像我之前所说的,第四章第五章的知识较之前的知识更为复杂抽象难懂,最开始我看第四章的时候搞不懂对象的概念,觉得太抽象了,包括其中的this.color=color,我不知道左右两边的color各是什么意思。不过遇到难题,我当然不会放弃,要想办法努力克服!不懂的知识点我看了一遍看两遍,如果还不懂就上网查或翻阅参考书。最终我将所有知识点的思路都理清了。比如之前这个问题,其实左边是对象成员,右边是参数,表明color这个对象成员能够拥有color参数的个别值! 学习第四章第五章,最重要的是要有能将抽象问题具体化的能力,将其建立成一个模型,这样才能方便理解。
? ?
——20145326
62. 教材学习中的问题和解决过程
CashCard.java,CardApp.java: 用方法(函数)封装操作
DRY是去除重复代码的有效手段
代码调试中的问题和解决过程
P124 代码
按照书上敲的,可是运行错误
package cc.openhome;
public class CashApp {
public static void main(String[] args) {
CashCard[] cards = {
new CashCard("A001",500,0),
new CashCard("A002",300,0),
new CashCard("A003",1000,1),
new CashCard("A004",2000,2),
new CashCard("A005",3000,3),
};
for(CashCard card : cards){
System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
}
}
尚未解决 且这个代码中的;为什么是在}后 new对象后的符号为什么是,
——20145327
63. 在调试书上P105的ShallowCopy代码的时候按照书上输入如下代码:
package week3;
/**
* Created by Administrator on 2016/3/19.
*/
class Clothes{
String color;
char size;
Clothes(String color,char size){
this.color = color;
this.size = size;
}
}
public class ShallowCopy {
public static void main(String[] args) {
Clothes[] c1 = {new Clothes("red",‘L‘),new Clothes("blue",‘M‘)};
Clothes[] c2 = new Clothes[c1.length];
for (int i = 0; i < c1.length;i++){
c2[i] = c1[i];
}
c1[0].color = "yellow";
System.out.println(c2[0].color);
}
}
出现如下问题
根据错误信息发现错误原因是类重复,将上述程序修改为如下代码后即可运行正常
package week3;
/**
* Created by Administrator on 2016/3/19.
*/
class Clothes3{
String color;
char size;
Clothes3(String color,char size){
this.color = color;
this.size = size;
}
}
public class ShallowCopy {
public static void main(String[] args) {
Clothes3[] c1 = {new Clothes3("red",‘L‘),new Clothes3("blue",‘M‘)};
Clothes3[] c2 = new Clothes3[c1.length];//复制元素?
for (int i = 0; i < c1.length;i++){//复制元素?
c2[i] = c1[i];
}
c1[0].color = "yellow";//通过c1修改索引0对象
System.out.println(c2[0].color);//通过c2取得索引0对象的颜色
}
}
而在运行如下程序时
package week3;
/**
* Created by Administrator on 2016/3/19.
*/
public class Average {
public static void main(String[] args) {
long sum = 0;
for (String arg :args){
sum += Long.parseLong(arg);
}
System.out.println("平均:"+(float) sum / args.length);
}
}
运行结果如下所示
阅读教材后发现原因是在运行时应一并指定命令行自变量,运行指令应为java week3.Average 1 2 3 4
则在命令行模式下运行结果如下图所示
在通过运行git bush时出现如下提示
通过查阅网页发现提示原因为:
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示
解决办法:
在git中输入?rm -rf .git,git config --global core.autocrlf false
然后重新运行
git init
git add .
即可
——20145328
?
64.
问题一:构造函数的具体用法?
解决:查阅得知,构造函数是与类名称同名,无须声明返回类型的方法
public class Some{
...
public Some(int a,String text)
...
}
问题二:打包基本类型是怎么实现的?
解决:例如:用Integer打包in类t型数据,可以用new创建Integer实例时传入int数据
问题三:什么事浅层拷贝,什么是深层拷贝?
解决:`
浅层复制:参考对象可以通用,没有实际复制出cloehes对象
for(int i=0;i<c1.length;i++){
c2 [i]=c1[i];
}
?
深层复制:c1每个索引参考的对象都会被复制
?
for(int i=0;i<c1.length;i++){
Clothes2 c=new Clothes2(c1[i].color,c1[i].size);
c2 [i]=c;
}`
问题四:
`package cc.openhome;
import java.util.Scanner;
public class Sum {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
long sum=0;
long number=0;
do{
System.out.printf("输入数字:");
number=Long.parseLong(scanner.nextLine());
sum+=number;
}while(number!=0);
System.out.println("总和:"+sum);
}
}`
代码是如何运行出总和的(System.out.println("总和:"+sum);)?
解决:显示每一个输入的数是 Scanner scanner=new Scanner(System.in)扫描显示;问百度,sum+=a 就是sum=sum+a;的意思,得最终和
问题五:op1.add(op2).add(op3).equals(result)是什么用法?
解决:调用add()方法得到它们的和,再调用equals()进行判等
问题六:
package cc.openhome;
public class Average {
public static void main(String[] args) {
long sum=0;
for(String arg:args){
sum+=Long.parseLong(arg);
}
System.out.println("平均:"+(float)sum/args.length);
}
}
为什么返回值为:平均:NaN
解决:没有提供整数
代码调试中的问题和解决过程
问题1
package cc.openhome;
?
class Clothes{
String color;
char size;
}
public class Field {
public static void main(String[] args) {
Clothes sun= new Clothes();
Clothes spring=new Clothes();
?
sun.color ="red";
sun.size = "S";
spring.color="green";
spring.size="M";
?
System.out.printf("sun(%s, %c)%n",sun.color,sun.size);
System.out.printf("spring(%s, %c)%n",spring.color,spring.size);
}
}
错误:java:不兼容的类型:java.lang.String无法转移为char
解决:java.lang.String与char,仔细检查代码发现着急把字符S用""括住,而不是‘‘。
问题2
package cc.openhome;
class Clothes {
String color;
char size;
Clothes(String color,char size){
this.color=color;
this.size=size;
}
}
public class Shallowcopy {
public static void main(String[] args) {
Clothes[] c1={new Clothes("red",‘L‘),new Clothes("green",‘M‘)};
Clothes[] c2=new Clothes[c1.length];
for(int i=0;i<c1.length;i++){
c1[i]=c1[i];
}
c1[0].color="yellow";
System.out.println(c2[0].color);
}
}
错误:Exception in thread "main" java.lang.NullPointerException
at cc.openhome.Shallowcopy.main
解决:百度解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象。检查发现 c1[i]=c1[i];书写错误,改为 c2[i]=c1[i];后运行正确
问题3
package cc.openhome;
public class CardApp {
public static void main(String[] args) {
CashCard[] cards={
new CashCard("A001",500,0),
new CashCard("A002",300,0),
new CashCard("A003",1000,1),
new CashCard("A004",2000,2),
new CashCard("A005",3000,3)
};
for(CashCard card:cards){
System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
?
}
}错误: java: 类CardApp是公共的, 应在名为 CardApp.java 的文件中声明
解决:书本上有错误,应把CardApp改为与类名称完全吻合的名,改为CashApp
问题4:
`package cc.openhome;
import java.util.Scanner;
public class CashApp {
public static void main(String[] args) {
CashCard[] cards={
new CashCard("A001",500,0),
new CashCard("A002",300,0),
new CashCard("A003",1000,1)
};
Scanner scanner=new Scanner(System.in);
for(CashCard card:cards){
System.out.printf("为(%s,%d,%d)储值:",card.number,card.balance,card.bonus);
card.store(scanner.nextInt());
System.out.printf("明细(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
?
}
}`
错误:java: 找不到符号
符号: 方法 store(int),
位置: 类型为cc.openhome.CashCard的
变量 card
解决:请教大神,得知这个程序代码调用了CashCard2,所以写的时候和书上的不能一样,组要根据自己的来调用,然后再把package cc.openhome;去掉,让两个函数在同一个工程文件下
import java.util.Scanner; public class CashApp { public static void main(String[] args) { CashCard2[] cards={ new CashCard2("A001",500,0), new CashCard2("A002",300,0), new CashCard2("A003",1000,1) }; Scanner scanner=new Scanner(System.in); for(CashCard2 card:cards){ System.out.printf("为(%s,%d,%d)储值:",card.number,card.balance,card.bonus); card.store(scanner.nextInt()); System.out.printf("明细(%s,%d,%d)%n",card.number,card.balance,card.bonus); } }}
再次编写运行正确
——20145329
65. 在数组的学习中看不懂这样的代码:
for(int score:scores){
System.out.printf("学生分数:%d %n",score);
}
再仔细阅读教材后发现,上述代码的意思可以解释为:
for(int i=0;i<scores.length;i++)
这个增强式for循环更加简便,他的思路是:上面的程序片段取得scores数组第一个元素,指定给score变量后执行循环体,依次类推,直到scores数组中所有元素都访问完为止。
——20145331
66. 教材学习中的问题和解决过程
Integer i1=100;
integer i2=100;
if(i1==i2){
System.out.println("i1==i2");
}
else{
System.out.println("i1!=i2");
}
在这段代码中i1和i2都是100,最后的结果显示为"i1==i2"。
Integer i1=200;
integer i2=200;
if(i1==i2){
System.out.println("i1==i2");
}
else{
System.out.println("i1!=i2");
}
而在这段代码中只是把i1和i2都改为了200,可是结果与上一段截然不同,结果显示为"i1!=i2",这是为何?在这两段代码中,两个参考名称的两个对象虽然内含值相同,但是两个对象打包后,若i在IntegerCache.low和IntegerCache.high之间,会从缓存中传回Integer实例,第一段代码中,因为i1,i2的值相等,所以从缓存中传回的是同一个实例,但第二段代码中,i在IntegerCache.low和IntegerCache.high之外,直接建立新的 Integer实例,新建立的实例虽然内含值相同,但并不是同一个实例。由于IntegerCache.low默认值是-128,IntegerCache.high默认值是127,所以200在这个范围之外,所以i1与i2不会参考到同一个Integer实例上,也就有了上面的效果。
——20145333
这段代码中的int number = (int)(Math.random()10);,不懂什么意思。
解决过程:通过百度,这段代码中,Math是数学类,random()是Math类中的一个方法,random本身只产生(0~1)之间的小数,random()10 意思是产生0~10之间的小数
,int(random()*10)的意思是强制取整,把小数部分去掉只去整数部分,所以就变成了产生0~9之间的整数
——20144303
?
回复:4 浏览:13
2016-03-20 16:22?来自?joke-bright
教材中的深层复制我并没有实现,代码同作者一样编译程序也不报错,但运行不了,显示Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at cc.openhome.Deepcopy.main(Deepcopy.java:21)
附图一张,求大神帮助:
![](http://images2015.cnblogs.com/blog/886760/201603/886760-20160320161534865-2008069089.jpg)
2016-03-20 16:22?joke-bright
回复?第1楼?
「差一错误」是学习数组时新手多会遇到的错误。数组 int arr[3]; 的元素只有arr[0] arr[1] arr[2].?
你的错误是for (int i=0; i<c1.length; i++)
不是i<=c1.length
——来自小组20145217
?
?
?
?
?
?
?
标签:
原文地址:http://www.cnblogs.com/xxy745214935/p/5389628.html