Java基础查漏补缺3

Scanner对象

  • 通过Scanner类来获取用户输入
    基本语法 Scanner s = new Scanner(System.in)

  • 通过Scanner类的next()和nextline()方法获取输入的字符串,在读取前一般使用hasNext()与hasNextline()判断是否还有输入的数据;

  • next()

    1. 一定要读取到有效字符才可以结束输入
    2. next()中不能加空格,以空格作为结尾
  • nextline()

    1. Enter为结束符
    2. 可以获得空白

一个输入输出的实例

package com.kong.scanner;

import java.util.Scanner;

//一个计算机实例
public class Domo05 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int m = 0;
        double sum = 0;
        System.out.println("请输入数字,用回车隔开,输入非数字结束");
        while(scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            m++;
            sum+=x;
            System.out.println("你输入了第"+m+"个数据,当前结果是sum="+sum);
        }
        System.out.println(m + "个数的和为:" + sum);
        System.out.println(m + "个数的平均值为:" + (sum/m));
        scanner.close();
    }
}

三大结构

  1. 顺序结构

  2. 选择结构

    • if选择

    • Switch 从Java SE 7开始 Switch支持字符串String类型了

  3. 循环结构

    • while先判断后执行

    • do…while先执行后判断,保证至少代码执行一次

    • for:输入 100.for 会自动生成for(i=0;i<100;i++)

      • for( ; ;)死循环==while()
    • 增强型for循环:Java5引入,主要用于数组或集合:for的偷懒方法

      package com.kong.struct;
      
      public class ForUp {
          public static void main(String[] args) {
      
              //增强的for循环
              int [] numbers = {20,30,40,60,50};
              for(int x:numbers){
                  System.out.println(x);
              }
              System.out.println("---------------------------");
              //等价于
              for (int i = 0; i < 5; i++) {
                  System.out.println(numbers[i]);
              }
      
          }
      }
      
      

反编译

反编译 java—编译成class文件----反编译(IDEA)

  1. 找到项目结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzKcgVbE-1649762534162)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100104694.png)]

  2. 选中文件所在目录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvQwu3Sk-1649762534165)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100132057.png)]

  3. 找到class文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S424pCAU-1649762534165)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100320884.png)]

  4. 在IDEA中打开文件夹

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C8CdhnCg-1649762534166)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100443376.png)]

  5. 把对应的class文件copy过来即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-77P3NEGF-1649762534166)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100603339.png)]

  6. 对比内存中的存储方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pLmXGprN-1649762534166)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412101049002.png)]

print和println

  1. print输出会换行,println输出不会换行
  2. \t相当于空格

break和continue

goto(在java中叫标签,用于返回某一步)

package com.kong.struct;

public class Goto {
    public static void main(String[] args) {
        //打印101-150之间的质数

        int count = 0;

        //不建议使用
        outer:for(int i = 101;i<150;i++){
            for(int j = 2;j<i/2;j++){
                if(i%j==0){
                    continue outer;
                }
            }
            System.out.print(i+" ");
        }
    }
}

练习打印三角形

package com.kong.struct;

public class practice {
    public static void main(String[] args) {
        //打印三角形  5行
        /*

             *
            ***
           *****
          *******
         *********
        
         */
        for (int i = 1; i <= 5; i++) {
            for(int j = 5;j>=i;j--){
                System.out.print(" ");
            }
            for(int j = 1;j <=i;j++){
                System.out.print("*");
            }
            for(int j= 1;j < i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

方法

  1. 一个方法只实现一个功能(原子性)

  2. main尽量保持简洁干净

  3. 课后拓展:值传递(Java) 和 引用传递 -------Java都是值传递

  4. 方法重载(就是在一个类中,有相同函数名称,但形参不同的函数)

    • 方法名称必须相同

    • 参数列表必须不同(可以是个数,或者类型,排序不同)

    • 方法的返回值类型可同可不同

      package com.kong.method;
      
      public class Domo01 {
          public static void main(String[] args) {
              int sum = add(1,2);
              System.out.println(sum);
      
          }
      
      
          //加法
          public static int add(int a,int b){
              return a+b;
          }
          
          public static double add(double a,double b){
              return a+b;
          }
      }
      
  5. 可变参数

    • 参数的个数可变
    • 从JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
    • 在方法声明中,在指定参数类型后加一个省略号(…)
    • 一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
package com.kong.method;

public class Domo03 {
    public static void main(String[] args) {
        //调用可变参数的方法
        printMax(34,4,21,1,5);
        printMax(new double[]{1,2,3});
    }
    public static void printMax(double...numbers){

        if(numbers.length == 0){
            System.out.println("No pass");
            return;
        }

        double result = numbers[0];
        //排序
        for (int i = 1; i < numbers.length; i++){
            if(numbers[i] > result){
                result = numbers[i];
            }

        }
        System.out.println("The max value is " + result);
    }





}
  1. 递归

    • 方法调用自己
    • 包括两个部分
      • 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
      • 递归体:什么时候需要调用自身方法
    • 边界条件:边界
    • 前阶段
    • 返回阶段:n*(n-1)
    • java一般使用栈
    • 能不用递归就不用递归,小规模计算可以试试
    package com.kong.method;
    
    public class Domo06 {
        public static void main(String[] args) {
    
            System.out.println(f(5));
        }
    
        //递归求阶层 5!
        /*
        若n==5
        过程如下
        return 5*f(4);
        return 5*4*f(3);
        return 5*4*3*f(2);
        return 5*4*3*2*f(1);
        return 5*4*3*2*1;
         */
        public static  int f(int n){
            if(n==1){
                return 1;//如果n==1跳出循环,否则就一步一步递归(递归头)
            }else{
                return n*f(n-1);//递归体
            }
        }
    }
    
    • 作业:设计一个计算机,加减乘除
      • 写四个方法:加减乘除
      • 利用循环+switch进行用户交互
      • 传递需要操作的数
      • 输出结果
    package com.kong.practice;
    
    import java.util.Scanner;
    
    public class SimpleCalculator {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            double result=0;
            int x = 0;
            while(x!=1) {
                System.out.println("请输入第1个操作数");
                double a = scanner.nextDouble();
                System.out.println("请输入运算符");
                String c = scanner.next();
                System.out.println("请输入第2个操作数");
                double b = scanner.nextDouble();
                switch (c) {
                    case "+":
                        result = add(a, b);
                        break;
                    case "-":
                        result = sub(a, b);
                        break;
                    case "*":
                        result = mul(a, b);
                        break;
                    case "/":
                        result = div(a, b);
                        break;
                    default:
                        System.out.println("输入格式错误");
                        break;
                }
                System.out.println(a + c + b + "=" + result);
                System.out.println("若结束程序请输入1,否则输入任意数字开始下一轮计算");
                x = scanner.nextInt();
            }
    
    
            scanner.close();
        }
    
        //加法
        public static double add(double a, double b) {
            return a+b;
        }
    
        //减法
        public static double sub(double a, double b){
            return a-b;
        }
    
        //乘法
        public static double mul(double a, double b){
            return a*b;
        }
    
        //除法
        public static double div(double a, double b){
            return a/b;
        }
    
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值