小黑子—Java从入门到入土过程:第五章

Posted 小黑子史蒂夫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小黑子—Java从入门到入土过程:第五章相关的知识,希望对你有一定的参考价值。

Java零基础入门5.0

Java系列第五章

1. 方法

1.1 方法的简单定义



1.2 带参方法

1.3 带返回值的方法和调用




案例:

public static void main(String[] args) 
        int sum1 = getSum(10,20,30);
        int sum2 = getSum(40,50,60);

        int sum = sum1+sum2;
        System.out.println(sum);
    

    public static int getSum(int num1, int num2, int num3) 
        int result = num1 + num2 + num3;
        return result;// 返回给方法的调用处
    


1.4 方法小结


1.

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        int[] arr =11,222,33,44,55;
        printArr(arr);
    

    public static void printArr(int[] arr)
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) 
            if(i==arr.length-1)
                System.out.print(arr[i]);
            else
                System.out.print(arr[i]+",");
            
        
        System.out.print("]");
    

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        int[] arr =1,5,7,3,8,10;
        int max = getMax(arr);
        System.out.println(max);
    

    public static int getMax(int[] arr)

        int max = arr[0];
        for (int i = 0; i < arr.length; i++) 
            if(arr[i]>max)
                max = arr[i];
            
        
        return max;
    


3.

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        int[] arr =1,5,8,12,56,89,34,67;

        boolean flag = contains(arr,89);
        System.out.println(flag);
    

    //1.我要干嘛? 判断数字在数组中是否存在
    //2.我干这件事情,需要什么才能完成?_数组数字
    // 3.调用处是否需要继续使用结果?返回true false
    public static boolean contains(int[] arr,int number)
        for (int i = 0; i < arr.length; i++) 
            if(arr[i]==number)
                return true;
            
        
        return false;
    


4.

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        int[] arr = 1, 2, 3, 4, 5, 6, 7, 8, 9;

        int [] copyArr = copyOfRange(arr,3,7);
        for (int i = 0; i < copyArr.length; i++) 
            System.out.print(copyArr[i]+" ");
        
    

    //将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新数组中
    public static int[] copyOfRange(int[] arr, int from,int to) //3~7
        // int[] 定义返回数组的函数
        int[] newArr =new int[to-from];
        //2.把原始数组arr中的from到to上对应的元素,直接拷贝到newArr中
        //伪造索引的思想
        int index = 0;
        for (int i = from; i < to; i++) 
            // 格式:数组名[索引]=数组值
            newArr[index] = arr[i];
            index++;
        
        return newArr;
    

return 关键字

  • 方法没有返回值:可以省略不写。如果书写,表示结束方法
  • 方法有返回值:必须要写。表示结束方法和返回结果

return break关键字的区别
return:

  • 其实跟循环没有什么关系,跟方法有关的,表示1结束方法 2返回结果

  • 如果方法执行到了return,那么整个方法全部结束,里面的循环也会随之结束了。

break关键字

  • 其实跟方法没有什么关系,结束循环或者switch的。

换行

        System.out.println("abc");//带ln 先打印abc,再进行换行
        System.out.print("abc");// 不带ln 只打印abc,不换行
        System.out.println();// 只换行

1.5 方法的重载

java 中提供了一个 方法命名的时候可以重名,但是方法的形参不能一样



练习:

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        compare(10, 20);
        compare((byte) 10,(byte) 20);
        short s1 =30;
        short s2 =50;
        compare(s1,s2);
    

    //会把相同功能的方法名起成一样的名字
    //好处1:定义方法的时候可以不用那么多的单词了
    // 好处2:调用方法的时候也不需要那么麻烦了。
    public static void compare(byte b1, byte b2) 
        System.out.println("byte");
        System.out.println(b1 == b2);
    

    public static void compare(short s1, short s2) 
        System.out.println("short");
        System.out.println(s1 == s2);
    

    public static void compare(int i1, int i2) 
        System.out.println("int");
        System.out.println(i1 == i2);
    

    public static void compare(long n1, long n2) 
        System.out.println("long");
        System.out.println(n1 == n2);
    

1.6 方法的基本内存原理


方法被调用之后就会进栈执行

当方法执行完毕之后,方法便会出栈,当方法出栈之后内容消失,程序结束。

1.7 方法的值传递

传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值


2.传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值



小结:

2. 基本数据类型和引用数据类型

只要是new出来的,就是引用数据类型

3. 综合练习

3.1 案例一:卖飞机票

package com.itheima.demo1;

import java.util.Scanner;

public class ArithmeticoperatorDemo1 
    public static void main(String args[]) 
        //分析:
        //1.键盘录入:机票原价、月份、头等舱或经济舱
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入机票的原价:");
        int ticket = sc.nextInt();

        System.out.println("请输入当前的月份:");
        int month = sc.nextInt();

        System.out.println("请输入当前购买的舱位 0 头等舱或 1 经济舱");
        int seat = sc.nextInt();

        //2.先判断月份是旺季还是淡季
        if (month >= 5 && month <= 10) 
            // 旺季
            //3.继续判断当前机票是经济舱还是头等舱
            if (seat == 0) 
                // 4.根据实际情况计算出对应的价格
                // 头等舱
                ticket = (int) (ticket * 0.7);
             else if (seat == 1) 
                ticket = (int) (ticket * 0.85);
             else 
                System.out.println("没有这个舱位");
            
         else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)) 
            // 淡季
            if (seat == 0) 
                // 头等舱
                ticket = (int) (ticket * 0.7);
             else if (seat == 1) 
                ticket = (int) (ticket * 0.85);
             else 
                System.out.println("没有这个舱位");
            
         else 
            System.out.println("键盘录入的月份不合法:");
        
        System.out.println(ticket);
    



代码优化:

package com.itheima.demo1;

import java.util.Scanner;

public class ArithmeticoperatorDemo1 
    public static void main(String args[]) 
        //分析:
        //1.键盘录入:机票原价、月份、头等舱或经济舱
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入机票的原价:");
        int ticket = sc.nextInt();

        System.out.println("请输入当前的月份:");
        int month = sc.nextInt();

        System.out.println("请输入当前购买的舱位 0 头等舱或 1 经济舱");
        int seat = sc.nextInt();

        //2.先判断月份是旺季还是淡季
        if (month >= 5 && month <= 10) 
            // 旺季
            //3.继续判断当前机票是经济舱还是头等舱
            ticket = getPrice(ticket, seat, 0.9, 0.85);
         else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)) 
            // 淡季
            ticket = getPrice(ticket, seat, 0.7, 0.65);
         else 
            System.out.println("键盘录入的月份不合法:");
        
        System.out.println(ticket);
    
    //1.我要干嘛﹖根据舱位和折扣来计算最终的票价
    //2.我干这件事,需要什么才能完成?原价舱位头等舱的折扣经济舱的折扣
    // 3.方法的调用处是否需要继续使用这个结果需要
    public static int getPrice(int ticket, int seat, double v0, double v1) 
        // 淡季
        if (seat == 0) 
            // 头等舱
            ticket = (int) (ticket * 0.7);
         else if (seat == 1) 
            ticket = (int) (ticket * 0.85);
         else 
            System.out.println("没有这个舱位");
        
        return ticket;
    

快捷键自动抽取方法 ctrl +alt + m

3.2 案例二:找质数

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String args[]) 
        int count = 0;
        for (int i = 101; i < 200; i++) 
            boolean flag = true;
            for (int j = 2; j < i; j++) 
                if (i % j == 0) 
                    flag = false;
                    break;
                
            
            if (flag) 
                System.out.println("当前数字" + i + "是质数");
                count++;
            
    

小黑子—Java从入门到入土过程:第四章

Java零基础入门4.0

Java系列第四章

1. 顺序结构

2. if语句




3. switch 语句



3.1 default的位置和省略

  • 1.位置 : defaule不一定是写在最下面的,我们可以写在任意位置。只不过习惯会写在最下面
  • 2.省略: defaule可以省略,语法不会有问题,但是不建议省略。

3.2 case 穿透

就是语句体中没有写break导致的。
执行流程:

  1. 首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配。
  2. 如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。
  3. 如果没有发现break,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止。
  4. 如果多个case的语句体重复了,那么我们考虑利用case穿透去简化代码。

3.3 switch 新特性 (jdk12开始)

支持箭头表达式返回

import org.junit.Test;

enum Gender 
    MALE, FEMALE, UNKNOWN;


public class TestX 
    private Gender gender = Gender.MALE;

    @Test
    public void show() 
        switch (gender) 
            case MALE:
                System.out.println("男");
                break;
            case FEMALE:
                System.out.println("女");
                break;
            default:
                throw new IllegalStateException(gender.toString());
                break;
        
    

Java 新特性 的 switch 表达式使用箭头表达时,不需要在每一个 case 后都加上 break。

	@Test
    public void show() 
        switch (gender) 
            case MALE -> System.out.println("男");
            case FEMALE -> System.out.println("女");
            default -> throw new IllegalStateException(gender.toString());
        

4. for 循环



package com.itheima.demo1;

import java.util.Scanner;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 

        //分析:
        //1.键盘录入两个数字
        Scanner sc = new Scanner(System.in);
        System.out.print("请录入一个数字表示范围的开始:");
        int start = sc.nextInt();
        System.out.println("请录入一个数字表示范围的结束:");
        int end = sc.nextInt();

        // 统计变量
        //简单逻辑,统计符合要求的数字个数
        int count = 0;
        //2.利时循环获取这个范围中的每一个数字
        for (int i = start; i <= end; i++) 
            //3.对每一个数字进行判断,统计有多少个满足要求的数字
            if (i % 3 == 0 && i % 5 == 0) 
                count++;
            
        
        System.out.println(count);

    


5. while 循环


for 和 while 的对比


package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 

        //分析:
        //1.定义数字
        int x = 123321;
        //定义一个临时变量用于记录×原来的值,用于最后进行比较
        int temp = x;
        //记录倒过来之后的结果
        int num = 0;
        //2.利用循环开始
        while (x != 0) 
            //从右往左获取每一位数字
            int ge = x % 10;
            //修改下x记录的值
            x= x/10;
            //把当前获取到的数字拼接到最右边
            num = num * 10 + ge;
        
        System.out.println(num);
        System.out.println(x);
        System.out.println(num == temp);
    

6.do…while 循环

7. 无限循环

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        // for 格式的无限循环
        for(;;)
            System.out.println("wdnmd");
        
    



可以按红色的方块暂停

8. 跳转控制语句

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        for (int i = 0; i < 5; i++) 
            if(i==3)
                continue;
            
            System.out.println("wdnmd"+i+"fk");
        
    


2.

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        for (int i = 0; i < 5; i++) 
            if(i==3)
                break;
            
            System.out.println("wdnmd"+i+"fk");
        
    

9. 练习

9.1 逢七过

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        for (int i = 1; i <=100; i++) 
            if(i%10==7||i/10%10==7||i%7==0)
                System.out.println("过");
                continue;
            
            System.out.println(i);
        
    

9.2 平方根

package com.itheima.demo1;

import java.util.Scanner;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int number = sc.nextInt();
        for (int i = 1; i < number; i++) 
            if (i * i == number) 
                System.out.println(i + "就是" + number + "的平方根");
                break;
             else if (i * i > number) 
                System.out.println((i - 1) + "就是" + number + "平方根的整数部分");
                break;
            
        
    

9.3 求质数

  1. 标记法
package com.itheima.demo1;

import java.util.Scanner;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int number = sc.nextInt();
        //定义一个变量,表示标记
        // 标记着number是否为一个质数
        // true:是一个质数
        //false :不是一个质数
        boolean flag = true;

        for (int i = 2; i < number; i++) 
            // i 表示依次表示这个范围之内的每一个数字
            //看number是否能被i整除就可以了
            if(number%i ==0)
                flag = false;
                break;
            
        
        //只有当这个循环结束了,表示这个范围之内所有的数字都判断完毕了
        // 此时才能断定number是一个质数
        if(flag)
            System.out.println(number+"是一个质数");
        else
            System.out.println(number+"不是一个质数");
        
    

  1. 平方根法

10. 随机数

package com.itheima.demo1;

import java.util.Random;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        //先获取一个随机数。
        // 范围:2~10
        //2.创建对象
        Random r = new Random();
        //3.生成随机数//判断技巧:
        //在小括号中,书写的是生成随机数的范围//这个范围一定是从e开始的。
        //到这个数-1结束
        //口诀:包头不包尾,包左不包右
        for(int i = 0;i<100;i++)
            int number = r.nextInt(10)+5;//0+5~9+5 //5~14
            System.out.println(number);
        


    

练习:

package com.itheima.demo1;

import java.util.Random;
import java.util.Scanner;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        //需求:程序自动生成一个1-100之间的随机数字,使用程序实现猜出这个数宇是多少?
        // 扩展小需求:加一个保底机制,3次猜不中,直接提示猜中了。
        //注意点:
        //1.生成随机数的代码int number = r.nextInt(100) +1;
        // 不能写在循环的里面的,否则每一次都会产生一个新的随机数
        //2.抽奖机制
        //用点券去抽水晶
        // 保底360次

        //计数器
        //用来统计当前已经猜了多少次。
        int count = 0;
        //分析
        // 1.生成一个1-100之间的随机数字
        Random r = new Random();
        int number = r.nextInt(100) + 1;
        System.out.println(number);
        // 2. 猜这个数字是多少
        Scanner sc = new Scanner(System.in);
        while (true) 
            System.out.println("请输入你要猜的数字:");
            int gussNumber = sc.nextInt();
            //3 .判断两个数字给出不同的提示
            // 猜的数字大了,提示大了
            //猜的数字小了,提示小了
            //猜的数字一样,提示猜中了
            count++;
            if(count == 3)
                System.out.println("猜中了");
                break;
            
            if(gussNumber>number)
                System.out.println("大了");
            else if(gussNumber<number)
                System.out.println("小了");
            else
                System.out.println("猜中了");
                break;
            
        


    

11. 数组


11.1 数组的地址

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        double[] arr6=1.93,1.75,1.73,181;
        System.out.println(arr6);// [D@4554617c 地址值
        // 扩展:
        //解释一下地址值的格式含义[D@4554617c
        //[﹔表示当前是一个数组
        //D:表示当前数组里面的元素都是double类型的
        //@:表示一个间隔符号。(固定格式)
        // 4554617c:才是数组真正的地址值,(十六进制)
        // 平时我们习惯性的会把这个整体叫做数组的地址值。

    

11.2 数组索引

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        //利用索引对数组中的元素进行访问1/1.获取数组里面的元素
        //格式:
        //数组名[索引]
        int[]arr = 1,2,3,4,5;
        //获取数组中的第一个元素//其实就是e索引上对应的元素l / int number = arr[e];
        // system.out.println( number);//1
        //获取数组中1索引上对应的数据,并直接打印出来/ / system.out.println(arr[1]);//2
        //2.把数据存储到数组当中
        //格式:数组名[索引]=具体数据/变量;
        //细节:一旦覆盖之后,原来的数据就不存在了。
        arr[0] = 100;
        System.out.println(arr[0]);//100
    

11.3 数组的遍历

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        //利用循环改进代码//开始条件: 0
        //结束条件:数组的长度-1(最大索引)
        //在Java当中,关于数组的一个长度属性,length
        // 调用方式:数组名.length

        //扩展:
        //自动的快速生成数组的遍历方式/ lidea提供的
        //数组名.fori
        int[] arr = 1,2,3,4,5;
        for(int i=0;i<arr.length;i++)
            System.out.println(arr[i]);
        
    

练习:
1.

package com.itheima.demo1;

public class ArithmeticoperatorDemo1 
    public static void main(String[] args) 
        //分析:
        //1.定义一个数组存储1,2,3,4,5,6,7,8,9,10
        int [] arr=1,2,3,4,5,6,7,8,9,10;
      

以上是关于小黑子—Java从入门到入土过程:第五章的主要内容,如果未能解决你的问题,请参考以下文章

《C语言深度剖析》第五章 内存管理 p1(完结)( C语言从入门到入土(进阶篇)

Java从入门到入土

《Java从入门到精通(入土)》字符串 下

C++从入门到入土第五篇:类与对象(下篇)

网络安全从入门到精通 (第五章-3) MSSQL反弹注入

Java入门 第一季第五章 编程练习解析

(c)2006-2024 SYSTEM All Rights Reserved IT常识