JAVA入门第一季学习补充

要有良好的编程习惯!!!

0、关于java:跨平台是指跨越操作系统。java源代码 .java--编译-->字节码文件 .class---运行。java是开源的。JDK包含JRE,JRE包含JVM,对于开发人员,需要安装JDK。对于普通用户只需要安装JRE(java运行环境)。

1、java关键字区分大小写。void是,但是Void不是。

2、java标识符适用于给Java中变量、类、方法命名的符号,严格区分大小写。

3、java中标点符号是英文的。

4、java变量名没有长度限制。

5、Java中基本数据类型变量保存数据本身,引用数据类型保存数据的空间地址。

6、Java中的变量需要先声明后使用。可以在声明变量的同时进行初始化,也可以先声明后复制,每次只能为一个变量赋一次值,但是可以修改多次。main方法中定义的变量必须先赋值,才可以输出。变量名不建议使用中文。

7、通过强制类型转换将 75.8 赋值给 int 型变量后,结果为 75,数值上并未进行四舍五入,而是直接将小数位截断。强制类型转换可能会造成数据的丢失哦

8、常量的值设定之后在程序运行的过程中不允许被改变,使用常量可提高代码的可维护性。常量名称全拼大写。

final double PI=3.15;

9、char定义字符,使用单引号,String 是字符串,使用双引号。

public static void main(String[] args) {` `final char GIRL='女';` `final char BOY='男';` `System.out.println(GIRL);` `System.out.println(BOY);}

10、int b=++a;a先自增再赋值给b;

11、< 、>、 <=、 >=只支持左右两边操作数是数值类型;==、!=、两边的操作数既可以是数值类型,也可以是引用类型。

12、异或 a^b;

13、三元运算符: 布尔表达式 ?表达式1 :表达式2( ? : 要使用英文状态)

14、优先级:

img

15、判断一个int型数值是否介于另外两个数值之间:

我的代码:else if(40>age>18)

正确代码:else if((age<40)&&(age>18))

错误原因:if中需要一个Boolean的表达式,而我的代码中第一个是‘40’为int类型。

16、当需要对选项进行等值判断时,使用switch语句会更加简洁明了。

执行过程:当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。

不得不说的几点小秘密:

16.1、 switch 后面小括号中表达式的值必须是整型或字符型

16.2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2

16.3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束。

16.4、 可以把功能相同的 case 语句合并起来,如:

case 1:

case 2:

​ …

16.5、 default 块可以出现在任意位置,也可以省略

17、关于for循环

for循环中循环变量初始化、循环次数、循环变量变化都可以省略,但是“;”不可以省略。其中,变量的初始化可以再循环体之前定义好,循环次数省略的话,会出现死循环,但是可以使用break跳出循环,循环变量的变化可以在循环体内进行定义。

for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值,如:

for(int i=8,j=9;i<=8,j<=10;i++,j--)

循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级

18、do...while 循环结束的条件是 while 后的条件不成立。

19、给定一个小于10位的数,判断它是几位数。例如:输入999,则输出 “它是个3位的数!”

我的错误代码:

int num = 999;
int count = 0;
while(num/10!=0){
    count++;
    num/=10;
}
System.out.println("它是个"+count+"位的数");

逻辑错误,改变了两次num的值。

正确代码:

int num = 999;
int count = 0;
while(num!=0){
    count++;
    num/=10;
}
System.out.println("它是个"+count+"位的数");

除法和取余一定要区分清楚作用。int除法用来除去位数,取余取每一位上的数字。

20、练习:实现接受三个班级的阁寺名学生的成绩,并求出平均分数。

我的错误代码:

public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    while(scanner.hasNext()){
        double a1=scanner.nextDouble();
        double a2=scanner.nextDouble();
        double a3=scanner.nextDouble();
        double a4=scanner.nextDouble();
        System.out.println((a1+a2+a3+a4)/4);
    }
}

存在的错误:没有考虑到需要控制班级数量。我的代码是需要手动停止输入。

第一次改正的代码:(使用了二重嵌套循环)

int sum=0;
for(int i=0;i<3;i++){
    for(int j=0;j<4;j++){
        int s=new Scanner(System.in).nextInt();
        sum+=s;
    }
    System.out.println(sum/4);
}

存在的错误:在计算后面的班级成绩总和时候,sum并没有归零。

正确的代码:

 int sum=0;
    for(int i=0;i<3;i++){
        sum=0;
        for(int j=0;j<4;j++){

            int s=new Scanner(System.in).nextInt();
            sum+=s;
        }
        System.out.println(sum/4);
    }
}

21、使用Java中的数组:

第一步:声明数组 数据类型[] 数组名;

第二步:分配空间 数组名 =new 数据类型[数组长度];

​ 也可以直接创建数组:int[] score={12,2,2,11};

​ 等价于: int[] score=new int[]{12,2,2,11}; 第二个[]中必须为空,不可以指定长度。

第三步:赋值 数组名[下标]=值;

第四步:处理数组中数据。

22、数组中找到并保存最大值,用数组中的某一个位置的元素,比如先假定第一个元素为最大值,max=nums[1]

23、编程练习:

任务

一、 存储35周学习内容(已提供部分完成的功能)

提示:
 1、 创建String数组,并为每一个元素赋值,内容为【第X周】XXX
 2、 利用int型的变量接收输入的数字

二、 计算今天处于第几周

提示:
 1、根据输入的数字,计算今天是第几个月
(例如:4对应第一月第四周,5代表第二月第一周)
 2、换算一下,输入的周是这个月的第几周
                                                         

三、 遍历并输出本月的学习内容,并标记本周内容

提示:
 1、利用for循环,找到数组中对应这个月的内容输出
 2、根据当前月第几周,在输出此行时,前面添加“√”
                                         

我的第一个错误代码:

package javademo;

import java.util.Scanner;

public class Arrays05 {
        public static void main(String[] args) {
            //创建String数组,并为每一个元素赋值。赋值内容为第几周+学习内容
            String[] contentList = new String[35];
            contentList[0] = "【第1周】环境搭建与语法入门";
            contentList[1] = "【第2周】Java语法之循环、数组与方法";
            contentList[2] = "【第3周】面向对象之封装与继承";
            contentList[3] = "【第4周】面向对象之单例模式与多态";

            contentList[4] = "【第5周】常用工具类(上)";
            contentList[5] = "【第6周】常用工具类(下)";
            contentList[6] = "【第7周】常用工具类(下)";
            contentList[7] = "【第8周】前端基础之HTML与CSS";

            contentList[8] = "【第9周】前端基础之JavaScript与综合案例";
            contentList[9] = "【第10周】Java Web基础";
            contentList[10] = "【第11周】Java Web基础";
            contentList[11] = "【第12周】常用功能与过滤器";

            contentList[12] = "【第13周】监听器与项目实战";
            contentList[13] = "【第14周】监听器与项目实战";
            contentList[14] = "【第15周】MySQL基础";
            contentList[15] = "【第16周】MySQL基础";

            contentList[16] = "【第17周】Java数据库开发基础";
            contentList[17] = "【第18周】框架前置知识";
            contentList[18] = "【第19周】MyBatis基础";
            contentList[19] = "【第20周】MyBatis实现OA系统项目实战";

            contentList[20] = "【第21周】MyBatis实现OA系统项目实战";
            contentList[21] = "【第22周】Linux环境搭建与Redis应用";
            contentList[22] = "【第23周】Spring基础";
            contentList[23] = "【第24周】Spring基础";

            contentList[24] = "【第25周】Spring基础";
            contentList[25] = "【第26周】SSM开发社交网站";
            contentList[26] = "【第27周】Spring Boot电商项目实战";
            contentList[27] = "【第28周】Spring Boot电商项目实战";

            contentList[28] = "【第29周】面试";
            contentList[29] = "【第30周】多线程与分布式";
            contentList[30] = "【第31周】多线程与分布式";
            contentList[31] = "【第32周】Spring Cloud基础";

            contentList[32] = "【第33周】Spring Cloud电商实战";
            contentList[33] = "【第34周】Spring Cloud电商实战";
            contentList[34] = "【第35周】Zookeeper+Dubbo应用与面试";

            //提示信息
            System.out.print("您要开始第几周学习啦,直接输入数字吧:");
            //设置变量存储接收到的数据
            int num  = new Scanner(System.in).nextInt();

            //计算今天是几月(1-月第一周、4-月第4周)
            int month=0;
            month=(num-1)/4+1;

            //计算输入的周是这个月的第几周
            int week=0;
            week=num%4;

            //提示信息
            System.out.println("以下是您本月的学习计划, √ 代表当周学习任务");
            System.out.println("=======================================");

            //利用for循环,找到数组中对应这个月的内容输出

            if(month==1){
                for (int i = 0; i <4 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==2){
                for (int i = 4; i <8 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==3){
                for (int i = 8; i <12 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==4){
                for (int i = 12; i <16 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==5){
                for (int i = 16; i <20 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==6){
                for (int i = 20; i <24 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==7){
                for (int i = 24; i <28 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==8){
                for (int i = 28; i <32 ; i++) {
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
            if(month==9){
                for (int i = 32; i <35 ; i++) {
                    //根据当前月第几周,在输出此行时,前面添加“√”
                    if(week==(i%4+1)){
                        System.out.print("√"+contentList[i]);
                    }
                    System.out.println(contentList[i]);
                }
            }
    }
}

错在:我不知道怎么去循环找到月份,所以去一个一个的循环,主要是没有理解了循环的意义。应该是为循环变量设置良好的初始值和循环次数,结合if条件找到和 输入值对应月份 相同的用循环变量表示的月份, 就是找到了那个月份。这也是定义了month这个变量的原因。

循环体中我没有想到,使用了暴力枚举,但是实际可以这种表示:

for(int i=(month-1)*4;i<month*4;i++);

但是存在的bug:

如果输入第35周以后的数字:会越界。可以使用try catch处理异常。

我的第二个正确代码:

package javademo;

import java.util.Scanner;

public class Arrays06 {
    public static void main(String[] args) {
        //创建String数组,并为每一个元素赋值。赋值内容为第几周+学习内容
        String[] contentList = new String[35];
        contentList[0] = "【第1周】环境搭建与语法入门";
        contentList[1] = "【第2周】Java语法之循环、数组与方法";
        contentList[2] = "【第3周】面向对象之封装与继承";
        contentList[3] = "【第4周】面向对象之单例模式与多态";

        contentList[4] = "【第5周】常用工具类(上)";
        contentList[5] = "【第6周】常用工具类(下)";
        contentList[6] = "【第7周】常用工具类(下)";
        contentList[7] = "【第8周】前端基础之HTML与CSS";

        contentList[8] = "【第9周】前端基础之JavaScript与综合案例";
        contentList[9] = "【第10周】Java Web基础";
        contentList[10] = "【第11周】Java Web基础";
        contentList[11] = "【第12周】常用功能与过滤器";

        contentList[12] = "【第13周】监听器与项目实战";
        contentList[13] = "【第14周】监听器与项目实战";
        contentList[14] = "【第15周】MySQL基础";
        contentList[15] = "【第16周】MySQL基础";

        contentList[16] = "【第17周】Java数据库开发基础";
        contentList[17] = "【第18周】框架前置知识";
        contentList[18] = "【第19周】MyBatis基础";
        contentList[19] = "【第20周】MyBatis实现OA系统项目实战";

        contentList[20] = "【第21周】MyBatis实现OA系统项目实战";
        contentList[21] = "【第22周】Linux环境搭建与Redis应用";
        contentList[22] = "【第23周】Spring基础";
        contentList[23] = "【第24周】Spring基础";

        contentList[24] = "【第25周】Spring基础";
        contentList[25] = "【第26周】SSM开发社交网站";
        contentList[26] = "【第27周】Spring Boot电商项目实战";
        contentList[27] = "【第28周】Spring Boot电商项目实战";

        contentList[28] = "【第29周】面试";
        contentList[29] = "【第30周】多线程与分布式";
        contentList[30] = "【第31周】多线程与分布式";
        contentList[31] = "【第32周】Spring Cloud基础";

        contentList[32] = "【第33周】Spring Cloud电商实战";
        contentList[33] = "【第34周】Spring Cloud电商实战";
        contentList[34] = "【第35周】Zookeeper+Dubbo应用与面试";

        //提示信息
        System.out.print("您要开始第几周学习啦,直接输入数字吧:");
        //设置变量存储接收到的数据
        int num  = new Scanner(System.in).nextInt();

        //计算今天是几月(1-月第一周、4-月第4周)
        int month=0;
        month=(num-1)/4+1;

        //计算输入的周是这个月的第几周
        int week=0;
        week=num%4;

        //提示信息
        System.out.println("以下是您本月的学习计划, √ 代表当周学习任务");
        System.out.println("=======================================");

        //利用for循环,找到数组中对应这个月的内容输出
        for (int i = 0; i <(contentList.length) ; i++) {
            if(month==((i/4)+1)){
                System.out.println(contentList[i]);
               if(week==((i+1)%4)){
                   System.out.println("√"+contentList[i]);
               }
            }
        }

//
    }
}

心得:要学好数学,要有良好的逻辑思维才行啊。

在我的idea是可以运行出结果的,在网页慕课上报了错:

运行失败

Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Scanner.java:862)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at HelloWorld.main(HelloWorld.java:46)
您要开始第几周学习啦,直接输入数字吧:

//设置变量存储接收到的数据
46: int nums = new Scanner(System.in).nextInt();

定义month的时候也可以用if判断一下。如果可以被4整除则month=nums/4;如果不可以被4整除

,month=nums/4+1;