《Java程序设计》 第2周学习总结

[亡魂溺海] 提交于 2020-01-31 23:31:45

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进行编写。
  • 针对老师提出的问题应该尽快有回复或者改正。

学习进度条

参考资料

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!