Java第四课

Java第四课:

1.1 回顾

1.1.1 Java中的数据类型:

基本类型(8种 ,每个类型字节数 (byte)129)和引用类型(类String 接口 注解 数组 枚举 等)
基本数据类型来讲,通常说存储在内存的栈中;
String算不算引用类型?
这里写图片描述

1.1.2 类型的转换:

前提是类型一定要兼容:
隐式转换(自动) double d=12;
显式转换(强制)int n =(int)12.34;
基本类型和引用类型之间的转换:
字符串“123” 整数123 Integer.parseInt(字符串的对象名);

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 此时需要将str1和str2先转换为 数字格式
        // int ->Integer
        /*
         * Integer n1 = Integer.valueOf(str1); int n2 = Integer.parseInt(str1);
         */

        String str1="123";
        String str2="123";
        int n1 = Integer.parseInt(str1);
        int n2 = Integer.parseInt(str2);
        System.out.println(n1 + n2);

        int n3 = 123;
        String str3 = n3 + "";

    }
}

246

1.1.3 运算符:

算术(+ - 。。。 % ++ –) 关系(> < >= <= ==) 逻辑(&& || ! & | ) 位(<< >>) 条件(? : ;) 赋值(= + =。。。)

1.1.4 分支结构 :

If(if -else) /if-else if /if -if
Switch-case: break

1.1.5 If和Switch的区别:

  1. 区间(某个范围)的判断优先选择多重if;等值可以使用if或者switch-case;
  2. Switch-case中的常量判断有类型规定: byte/char/short/int/enum/String(jdk1.7)
enum Sex{
    男,女;
}
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Sex sex = Sex.男;
        switch (sex) {
        case 男:
            System.out.println("男");
            break;

        default:
            break;
        }
    }
}

1.1.6 循环结构:

基本的for循环:
for(表达式1;表达式2;表达式3)
{
//循环体
}

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        for (int i = 0, j = 4; i < 5; i++, j--) {
            System.out.println(i + "+" + j + "=" + (i + j)); // 20?
        }

    }
}

1.2 控制循环的关键字:

break: 跳出循环结构 ;向外跳出一层;
continue:终止本次循环,尝试进行下一次循环;

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            System.out.println("请问你吃了吗?(yes/no)");
            Scanner input = new Scanner(System.in);
            String ans = input.next();
            // 如果输入的是yes 循环结束
            if (ans.equals("yes")) {
                break;

            } else {
                // 否则,我们让他吃
                System.out.println("吃饭很重要,来给你一份 台湾卤肉饭~");
            }
        }
        System.out.println("over ~ 嗝");

    }
}
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            System.out.println("请问你吃了吗?(yes/no)");
            Scanner input = new Scanner(System.in);
            String ans = input.next();
            // 如果输入的是yes 循环结束
            if (ans.equals("yes")) {
                // break;
                continue;
            }
            System.out.println("循环体内的代码");

        }
        System.out.println("over ~ 嗝");

    }
}

这里写图片描述

1.3 其他循环结构:

我们学过for循环了,我发现,循环中大概有几个重要的组成部分
这里写图片描述

1.3.1 While循环

先判断条件,如果条件为真,执行循环体,如果为假,跳过循环;
>

1.3.2 Do-while循环

这里写图片描述

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        System.out.println("***********while**先判断条件*********");
        int i = 1;
        while (i > 1) {
            i++;
            System.out.println("i" + i);
        }
        System.out.println("***********do-while**先执行一次再说*******");
        int j = 1;
        do {
            j++;
            System.out.println("j" + j); //2 
        } while (j > 1);//死循环
    }
}

1.4.3 Foreach循环:

这里写图片描述

1.5 嵌套循环:

1.5.1 基本结构:

在一层循环中,还包含了另外一层的循环,这种结构称为嵌套循环;

这里写图片描述

1.5.2 九九乘法表:

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 外循环控制的是行的打印 ,9次(9行)
        for (int i = 1; i <= 9; i++) {
            // 内循环 控制的是每行打印的次数(表达式的个数 1*1 = 1),i 次
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + (j * i) + " ");
            }
            // 换行
            System.out.println();
        }
    }
}

1.5.3 嵌套循环的小练习:

  1. 公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一 值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 公鸡 [0~20]
        for (int i = 0; i <= 20; i++) {

            // 母鸡 [0~33]
            for (int j = 0; j <= 33; j++) {

                // 小鸡 [0~100] 100-公鸡个数-母鸡
                int k = 100 - i - j;

                // 百钱(100块)
                if (15 * i + 9 * j + k == 300) {
                    System.out.println("公鸡 :" + i + "母鸡 :" + j + ", 小鸡:" + k);
                }

            }

        }

    }
}

公鸡 :0母鸡 :25, 小鸡:75
公鸡 :4母鸡 :18, 小鸡:78
公鸡 :8母鸡 :11, 小鸡:81
公鸡 :12母鸡 :4, 小鸡:84
2.1!+2!+3!+….+7!的结果是多少?

这里写图片描述
这里写图片描述

1.6 程序的调试(重要):

尽快找到程序中的错误,使得程序运行结果与预期相符
设置断点;单步执行(F5 F6 F7 F8) ,过程中要去观察程序执行过程(观察其中的变量变化);修复问题;

这里写图片描述
这里写图片描述
这里写图片描述

1.7 循环练习题目:

题目:打印出所有(100~999)的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方。
见昨天的课后作业讲解
1.7.1 DEBUG题目(小球):
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?(DEBUG)

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 公鸡 [0~20]
        // 定义一个变量保存的是每次落地后弹起的高度
        double height = 100;// 初始高度为100
        int i = 1;// 循环变量

        // 计算小球经过的总的路径;
        double sum = 100;// 第一次落地时的高度值
        while (i <= 10) {
            // 每次落地弹起的高度为原来的一半
            height = height / 2;
            // System.out.println("第" + i + "次落地,弹起的高度为" + height + " m");
            if (i < 10) {
                sum = sum + height * 2;
                System.out.println("第" + (i + 1) + "次落地时的经过的路程长度和 :" + sum);
            }
            i++;// 循环变量要++
        }

        System.out.println("经过的路程长度为 :" + sum);

    }
}

1.7.2 猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 ;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 请使用for和while分别处理;
分析: 一共吃了九天;倒着推理;
第10天早上开始: 没吃, 1
第9天早上: 没吃, (1+1)*2=>4
第8天早上开始: 没吃, (4+1)*2 =>10

第1天早上,摘了,还没吃 (?+1)*2 =>
以上的分析可以得到:
1. 循环执行几次;
2. 计算桃子个数的表达式 (?+1)*2

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 以上的分析可以得到:
        // 1. 循环执行几次; 9 ,从9天开始(第10天没吃到),到第一天结束
        // 2. 计算桃子个数的表达式 (?+1)*2

        // day表示的是天

        // 计算桃子总和 sum
        int sum = 1;

        for (int day = 9; day >= 1; day--) {

            sum = (sum + 1) * 2;
            System.out.println("第" + day + "天,没吃,一共有" + sum + "个桃子");

        }

        // 循环结束
        System.out.println("sum :" + sum);

    }
}
// 改成while循环
        System.out.println("***************while循环***************");

        int sum0 = 1;
        int day = 9;
        while (day >= 1) {

            sum0 = (sum0 + 1) * 2;
            System.out.println("第" + day + "天,没吃,一共有" + sum0 + "个桃子");
            day--;

        }

        // 循环结束
        System.out.println("sum0 :" + sum0);

1.8 数组:

这里写图片描述
这里写图片描述
这里写图片描述

1.8.1 数组定义和遍历代码:

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 类型 [] 数组名 = new 类型[长度];
        // 默认值 int类型0
        System.out.println("******arr01******");
        int[] arr01 = new int[5];
        for (int i = 0; i < arr01.length; i++) {
            System.out.println(arr01[i]);
        }

        // new 出来,直接赋值 不指定长度
        int[] arr02 = new int[] { 11, 2, 3, 4, 5 };

        System.out.println("******arr032----***foreach(for)***");
        // 数据类型 变量名: 数组名(集合)
        for (int i : arr02) {
            System.out.println(i);

        }

        // 不需要new关键字 直接使用{}赋值
        int[] arr03 = { 1, 2, 3, 4, 5 };
        System.out.println("******arr03******");
        // 访问数组元素 下标(索引) 0 到数组长度-1结束了 数组名[下标]
        // 会和循环结合在一起使用
        // arr03.length 表示的数组的长度
        for (int i = 0; i < arr03.length; i++) {
            System.out.println(arr03[i]);
        }

    }

}

1.8.2 数组的存储:

这里写图片描述

1.8.3 二维数组:

  1. 从控制台接收5个学生的java成绩,求和和平均分;
package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 成绩
        double[] score = new double[5];

        // 控制台输入
        Scanner input = new Scanner(System.in);

        /// 使用循环来处理输入
        // score.length 数组的长度

        // 累加求和
        double sum = 0;
        for (int i = 0; i < score.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个学生的java成绩");
            // 接收
            score[i] = input.nextDouble();

            // 累加
            sum += score[i];

        }

        System.out.println("总成绩为 :" + sum + ",平均成绩为: " + sum / score.length);

    }

}
  1. 从控制台接收5个学生的java成绩,求最高分和最低分;

1.9 总结:

  1. 循环结构: while do-while foreach(遍历数组或者集合) 嵌套循环
  2. 数组(定义 声明 定义 赋值 访问 +循环)
  3. 程序调试: debug F5 F6 F7 ….
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值