20145318 《Java程序设计》第2周学习总结
教材学习内容总结
- short,2字节;int,4字节;long,8字节;byte,1字节;float,4字节;double,8字节;char,2字节;boolean只有true和false。
- 基本类型:整型(short、int、long) 、字节(byte) 、浮点型(float、double) 、字符(char)、布尔(boolean,只有true和false,且不能与其他类型运算)。
- 常量:整数可以用二进制(b),八进制(o)、十进制、十六进制(x)。
- 小数默认为double型,只有其后加f或F才是浮点型,double型精度更高。
- 类型转换:如果表达式中包括不同类型,则以精度最高的类型计算;可强制转换,如sqrt的类型是double型,如果要直接引用即将int强制转换为double型。
- break 可以离开当前for、switch、while等循环语句,并执行循环外下一个语句。
- continue 用于循环语句中,不执行其后的语句,回到循环开始进行下一次循环,不离开循环。
- 除算术运算符、赋值运算符、比较运算符、逻辑运算符之前常用外,位运算符包括<<、>>、>>>、&、|、^、~,只能对二进制运算,有时用位运算符能简化程序,但是可读性不高,推荐学习但是实际编程不推荐。
- goto可以用break/continue代替,之前用goto语句用的很顺手,但是实际编程中不建议使用goto,在此总结一下goto语句的优缺点。优点:可以快速的跳出多重循环,方便的去到我所想要执行的语句处。缺点:虽然可以用goto代替ifelse等语句,但是它会使程序搅在一起,像一团乱了的毛线球,不容易阅读,也就是所谓的破坏语言的结构性。总结来说,goto语句一般不用,尽量少用,特别是对于初学者,goto可能会在某些方面简化程序,但是终究不是正解。
代码调试中的问题和解决过程
打印九九乘法表
/*
需求:打印九九乘法表如下。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
思路:正三角形状可用改变for循环中间的表达式实现,注意到每一行前面的乘数依次增加,后数不变,可用for循环嵌套实现。
针对得数位数不同,可用制表符\t使格式整齐。两数之积直接用y*x表示。
*/
class MultiplicationTable
{
public static void main(String[] args)
{
int x,y;
for(x=1;x<=9;x++)
{
for(y=1;y<=x;y++)
{ //两种方法都可以打印,注意printf和print的区别
System.out.printf("%d*%d=%d\t",y,x,y*x); /* 此处用print不行。若不用"%d\t",可以用"%2d " */
//System.out.print(y+"*"+x+"="+y*x+"\t"); //制表符:\t,使每列对齐。
}
System.out.println();
}
}
}
冒泡排序
/*
需求:冒泡排序。
思路:冒泡排序即第一个元素与第二个元素进行比较,大者向后移动,第二个元素与第三个元素比较,大者向后移动,一轮比较完成时,最大的元素就在最后面,
此时开始第二轮比较,同样是第一个与第二个比较,但是此时最后一个元素已经不需要比较了,依次类推,最后一轮第一个元素和第二个元素比较完成即排序完成。
交换数值:新定义函数
*/
class BubbleSort
{
public static void main(String[] args)
{
int[] arr={4,2,9,6,8,3,1,5,7};
printArray(arr);
bubbleSort(arr);
printArray(arr);
}
public static void bubbleSort(int[] arr)
{
for(int i=0;i<arr.length;i++)
for(int j=0;j<arr.length-i-1;j++)
//注意:-i是因为依次比较i次后后面的i个数已经确定,不需要再比较;
//-1是因为避免下一行arr[j+1]越界。
if(arr[j]>arr[j+1])//注意比较的是相邻两元素。
{
sort(arr,j,j+1);
}
}
public static void printArray(int[] arr)//注意两个函数包含在一个类中
{
System.out.printf("[");//先打印一个[
for(int i=0;i<arr.length;i++)//数组名.length表示数组长度
{
if(i<arr.length-1)
System.out.printf("%d,",arr[i]);//若非最后一个元素,打印"%d,"
else
System.out.printf("%d]",arr[i]);//若是最后一个元素,打印"%d]"
}
System.out.printf("\n");//最后在循环外换行
}
public static void sort(int[] arr,int a,int b)
//int 三个系数,一个数组两个代表数组的标号,不能直接int 两个数
{
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
结果
代码托管
其他(感悟、思考等,可选)
初学者学习Java这样的操作性课程需要大量的练习,只有在编写代码的过程中才有所提高,但是我不提倡遇到问题遇到错误就去问同学问老师,我认为更好的解决办法是自己查错和百度,经过努力的纠错过程才会印象更加深刻,特别是针对稍微复杂一点的循环嵌套,有很多需要注意的细节,比如<=和<,都需要考虑清楚。
另外写注释的习惯也要逐步培养,养每段代码class前有需求和思路分析,代码中复杂的部分或者复习时需要注意的部分应该有所标记。
之后会尝试IDEA进行编写。
针对老师提出的问题应该尽快有回复或者改正。