当前位置: 首页 > news >正文

Java基础学习(三):输入输出、控制流程、大数值、数组

目录

  • 一、输入输出
    • 1. 读取输入
    • 2. 格式化输出
  • 二、控制流程
    • 1. 块作用域
    • 2. 条件语句
    • 3. while循环
    • 4. for循环
    • 5. switch语句:多重选择
    • 6. 扩展:break和continue
  • 三、大数值
  • 四、数组
    • 1. 数组的初始化
    • 2. 匿名数组
    • 3. 数组定义方式
    • 4. 数组拷贝
    • 5. 命令行参数
    • 6. 数组排序

相关文章

  • Java基础学习(一):类名规范、返回值、注释、数据类型
  • Java基础学习(二):Java中的变量和常量、final(重点)、运算、字符串
  • Java基础学习(三):输入输出、控制流程、大数值、数组
  • 多维数组可以看学习数组内存图(二)这篇文章有涉及到
  • 八大排序可以看这四篇文章
    • 学习冒泡排序+选择排序并使用java写代码
    • 学习插入排序+希尔排序并使用java写代码
    • 学习堆排序+基数排序并使用java写代码
    • 学习递归+归并排序+快速排序并使用java写代码

一、输入输出

1. 读取输入

  • 输出流System.out.println();
  • 打印console.log();在控制台打印
  • 输入流System.in
    想要输入,需要一个写数据的地方,需要控制台进行输入,所以需要构造一个Scanner对象,对控制台进行扫描,与System.in关联。
    例如:Scanner sc = new Scanner(System.in);

Scanner类中的方法

  • next():获取下一个单词,以空格作为结束符
    Scanner sc = new Scanner(System.in);
    String a = sc.next();
    System.out.println(a);
    //在控制台中输入内容,回车
    //输入:aaa bbb ccc
    //输出:aaa
    
    next
  • nextLine():获取下一行内容
    Scanner sc = new Scanner(System.in);
    String a = sc.nextLine();
    System.out.println(a);
    //在控制台中输入内容,回车
    //输入:abc def
    //输出:abc def
    
    nextLine
    • 注意:nextLine()单独使用没有问题,但与其他的方法一起用,nextLine()会吃掉回车,所以可以多写一行,让其吃掉回车
    • 下图中的示例:num的值为10,a的值为空格,将abcdefg给了b作为值
      在这里插入图片描述
  • nextInt():获取一个整数,第一个输入的为整数,否则报错
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    System.out.println(a);
    //在控制台中输入内容,回车
    //输入:12 15 nihao
    //输出:12
    
    nextInt:``
  • nextDouble():获取一个浮点数,第一个输入的为数字,否则报错
    Scanner sc = new Scanner(System.in);
    double a = sc.nextDouble();
    System.out.println(a);
    //在控制台中输入内容,回车
    //输入:12 nihao 12.0
    //输出:12.0
    
    nextDouble
  • hasNext():检测是否还有其他的单词
    Scanner sc = new Scanner(System.in);
    boolean a = sc.hasNext();
    System.out.println(a);
    //在控制台中输入内容,回车
    //输入:What is your name?
    //输出:true
    
    hasNext
  • hasNextInt():检测是否还有其他的整数
    Scanner sc = new Scanner(System.in);
    boolean a = sc.hasNextInt();
    System.out.println(a);
    //在控制台中输入内容
    //输入:12 15 12.0
    //输出:true
    
    hasNextInt
  • hasNextDouble():检测是否还有其他的浮点数
    Scanner sc = new Scanner(System.in);
    boolean a = sc.hasNextDouble();
    System.out.println(a);
    //在控制台中输入内容,回车
    //输入:What is your name?
    //输出:false
    
    hasNextDouble

2. 格式化输出

输出

System.out.print();

java SE 5.0 沿用了C语言中的printf方法,例如:

double x = 10000.0 / 3.0;
System.out.printf("%8.2f",x);//输出:3333.33

每一个以%字符开始的格式说明符都要用相应的参数替换。
printf的转换符
控制格式化输出的标志:
printf的标志

二、控制流程

1. 块作用域

  • 指的是当前代码子在那一块范围之内起作用
  • 大括号{}括起来的代码

2. 条件语句

  • if语句:if(){},条件符合,进入到if里面去
    int a = 10;
    if(a>0){System.out.println("a");
    }//输出:a
    
  • if else 语句:if(){}else{},条件符合,进入到if里面去;不满足,进入到else中
    int a = 10;
    int b = 5;
    if(a>b){System.out.println("a");
    }else {System.out.println("b");
    }//输出:a
    
  • 多条件判断:if(){}else if(){}else{},满足if条件,进入if中;满足else if条件,进入到else if中;否则进入到else中
    int a = 10;
    int b = 50;
    int c = 5;
    if(a>b){System.out.println("a");
    }else if(a>c){System.out.println("a>c");
    }else {System.out.println("b");
    }//输出:a>c
    

3. while循环

while(条件) 执行代码语句

  • 当条件为true时,while循环执行
  • 如果开始循环条件的值为false,while循环题体一次也不执行
int a = 10;
while(a<15) {System.out.println(a);a++;
}//输出:10 11 12 13 14

do 代码语句 while(条件)

  • 先执行语句,在检测循环条件;然后在重复语句,在检测循环条件

4. for循环

  • for循环中写三条语句
    • 第一句为初始条件,还可以定义在函数外面
    • 第二句为条件判断,满足,执行;不满足,结束
    • 第三句还可以定义到函数里面
      for (int i = 0; i < 5; i++) {System.out.println(i);
      }
      //等价于
      int i = 0;
      for (; i < 5;) {System.out.println(i);i++;
      }//输出:0 1 2 3 4
      
  • for-each循环:通常用在遍历中
    • num一次代表arr中的每一项
    • :后是要循环的那个列表
      int[] arr = {5,7,4,2,0,3};
      for(int num:arr) {System.out.println(num);
      }
      

5. switch语句:多重选择

  • 从上往下依次去匹配
  • 从与选项值相匹配的case标签出开始执行直到遇到break语句
  • 没有相匹配的case标签,有default子句,执行这个子句
  • case标签
    • 类型为char、byte、short、int的常量表达式
    • 枚举常量
    • 还可以是字符串
      int a = 10;
      switch (a) {
      case 5:System.out.println("555");break;
      case 7:System.out.println("777");break;
      case 10:System.out.println("aaa");break;
      case 12:System.out.println("bbb");break;
      default:System.out.println("a");break;
      }//输出:aaa
      

注意:如果不加break,会击穿

int a = 10;
switch (a) {
case 5:System.out.println("555");
case 7:System.out.println("777");
case 10:System.out.println("aaa");
case 12:System.out.println("bbb");
default:System.out.println("a");
}//输出:aaa  bbb  a

6. 扩展:break和continue

使用break结束

  • i=0时,不符合if条件,打印*
  • i++
  • 直到i=5,符合if条件,结束,跳出它所在的整个循环
for (int i = 0; i < 10; i++) {System.out.println(i);if(i>=5) {break;}System.out.println("******");
}

输出结果:

0
******
1
******
2
******
3
******
4
******
5

使用continue结束

  • i=0时,不符合if条件,打印*
  • i++
  • 直到i=5,符合if条件,结束,结束本次循环,if下面的语句不在执行
  • 但for循环依然执行,打印i,i=6,符合if条件,结束本次循环,if下面的语句不在执行
  • 直到i<10,循环结束
for (int i = 0; i < 10; i++) {System.out.println(i);if(i>=5) {continue;}System.out.println("******");
}

输出结果:

0
******
1
******
2
******
3
******
4
******
5
6
7
8
9

三、大数值

满足整数和浮点数的精确度:

  • Biglnteger:计算整数,实现了任意精度的整数运算
  • BigDecimaL:计算小数,实现了任意精度的浮点数运算
  • valueOf()方法:可以将普通的数值转换为大数值
    BigInteger a = BigInteger.valueOf(200000000);
    System.out.println(a.add(a));
    

运算方法

  • add():和
    BigInteger a = new BigInteger("200000000");
    System.out.println(a.add(a));//输出:400000000
    
  • subtract():差
    BigInteger a = new BigInteger("200000000");
    System.out.println(a.subtract(a));//输出:0
    
  • multipiy():积
    BigInteger a = new BigInteger("200000000");
    System.out.println(a.multiply(a));//输出:40000000000000000
    
  • divide():商
    BigInteger a = new BigInteger("200000000");
    System.out.println(a.divide(a));//输出:1
    
  • mod():取余
    BigInteger a = new BigInteger("200000000");
    System.out.println(a.mod(a));//输出:0
    
  • compareTo:另一个大数值相等,返回0;小于另一个大数值,返回负数;否则,返回正数
    BigInteger a = BigInteger.valueOf(200000000);
    BigInteger b = BigInteger.valueOf(200000000);
    BigInteger c = BigInteger.valueOf(2000000000);
    BigInteger d = BigInteger.valueOf(100000000);
    System.out.println(a.compareTo(c));//输出:0
    System.out.println(a.compareTo(b));//输出:-1
    System.out.println(a.compareTo(d));//输出:1
    

四、数组

1. 数组的初始化

第一次赋值。

int[] arr = {5,7,4,2,0,3,6};

2. 匿名数组

初始化一个匿名数组

new int[] {5,7,4,2,0,3,6};

3. 数组定义方式

直接赋值

int[] arr = {5,7,4,2,0,3,6};

new数组长度

int[] arr = new int[5];

new数组值

int[] arr = new int[]{5,7,4,2,0,3,6};

4. 数组拷贝

数组拷贝分为:深拷贝和浅拷贝。

  • 深拷贝:把所有的数值复制过来,自己再去开辟一个新的空间,将数组复制过来,如果自己对数值做改变,指改变自己的数组
    int[] arr1 = {5,7,4,2,0,3,6};
    int[] arr2 = new int[arr1.length];
    for (int i = 0; i < arr1.length; i++) {arr2[i] = arr1[i];
    }
    arr2[0] = 100;
    System.out.println(Arrays.toString(arr1));
    System.out.println(Arrays.toString(arr2));
    //输出:[5, 7, 4, 2, 0, 3, 6]
    //     [100, 7, 4, 2, 0, 3, 6]
    
  • 浅拷贝:只是把地址复制过去,其中一个对数字做改变,另一个页改变,因为它们指向的是同一个空间
    int[] arr1 = {5,7,4,2,0,3,6};
    int[] arr2 = arr1;
    arr2[0] = 100;
    System.out.println(Arrays.toString(arr1));
    System.out.println(Arrays.toString(arr2));
    //输出:[100, 7, 4, 2, 0, 3, 6]
    //     [100, 7, 4, 2, 0, 3, 6]
    

5. 命令行参数

  • 指的是给main传参

步骤如下:

  • 写一个Test.java的文件,内容如下
    import java.util.Arrays;public class Test {public static void main(String[] args) {System.out.println(Arrays.toString(args));}
    }
    
  • 打开cmd,编译文件:javac Test.java
  • 执行:java Test;打印结果:[](因为没有传参,所有数组为空)
  • 传参:java Test aa bb cc dd;打印结果:[aa, bb, cc, dd]

6. 数组排序

  • 有八大排序
  • java中Arrays类中的sort方法,底层用的是快速排序,默认由小到大排序
    int[] arr = {5,7,4,2,0,3,6};
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));//输出:[0, 2, 3, 4, 5, 6, 7]
    
  • 如果想要由大到小排序,根据拉姆达表达式排序
    • (a,b)对于数组中的每一项
    • b-a表示倒过来
    • 注意:不能使用基本类型,应使用包装类
      Integer[] arr = {5,7,4,2,0,3,6};
      Arrays.sort(arr,(a,b)->b-a);
      System.out.println(Arrays.toString(arr));//输出:[7, 6, 5, 4, 3, 2, 0]
      
  • Arrays类中的sort方法还可以对字符串String类型的进行排序,根据ASCII码进行排序
    String[] arr = {"aa","x","acd","aca","a"};
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));//输出:[a, aa, aca, acd, x]
    
  • 对自定义类型进行排序
    public class Cat {int age;int weight;//构造方法public Cat(int a, int b) {age = a;weight = b;}@Overridepublic String toString() {return "Cat [age=" + age + ", weight=" + weight + "]";}
    }
    
    import java.util.Arrays;public class Test {public static void main(String[] args) {Cat cat1 = new Cat(5,8);Cat cat2 = new Cat(2,6);Cat cat3 = new Cat(3,7);Cat cat4 = new Cat(4,6);Cat[] arr = {cat1,cat2,cat3,cat4};Arrays.sort(arr,(a,b)->a.age-b.age);//需要明确按照什么排序,比如说:小猫的年龄,由小到大排序System.out.println(Arrays.toString(arr));//输出:[Cat [age=2, weight=6], Cat [age=3, weight=7], Cat [age=4, weight=6], Cat [age=5, weight=8]]}
    }
    

扩展:基本类型对于的包装类

  • byte 对应 java.lang.Byte
  • short 对应 java.lang.Short
  • int 对应 java.lang.Integer
  • long 对应 java.lang.Long
  • float 对应 java.lang.Float
  • double 对应 java.lang.Double
  • boolean 对应 java.lang.Boolean
  • char 对应 java.lang.Character

多维数组可以看学习数组内存图(二)这篇文字有涉及到。

http://www.lryc.cn/news/612295.html

相关文章:

  • 客流特征识别准确率提升 29%:陌讯多模态融合算法在零售场景的实战解析
  • 数据结构与算法的认识
  • Android 之 ViewBinding 实现更安全、高效的视图绑定
  • 【渲染流水线】[应用阶段]-[裁剪]以UnityURP为例
  • CGAL Kernel 和 Traits 类深度解析:从官方教程到实践应用
  • prefetch 下载 GEO 数据注意事项
  • Milvus 向量数据库
  • 使用 Helm 在 Kubernetes 中安装 Milvus
  • 安装向量数据库Milvus
  • C++实现线程池(3)缓存线程池
  • Chrontel昆泰-【CH7036A-BF】CH7036 LVDS to HDMI/VGA/LVDS Converter
  • ​ubuntu22.04系统入门 (四)linux入门命令 权限管理、ACL权限、管道与重定向
  • Qt菜单栏与工具栏实战
  • 学习 Android(十四)NDK基础
  • VGG16训练和测试Fashion和CIFAR10
  • 利用C++11和泛型编程改进原型模式
  • 学习 Android(十五)NDK进阶及性能优化
  • 功能安全和网络安全的综合保障流程
  • 分布式事务Seata、LCN的原理深度剖析
  • vue中reactive()和ref()的用法
  • selenium操作指南
  • 状态模式及优化
  • 【机器学习篇】02day.python机器学习篇Scikit-learn基础操作
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘gensim’问题
  • Session 和 JWT(JSON Web Token)
  • python:非常流行和重要的Python机器学习库scikit-learn 介绍
  • 毕业设计选题推荐之基于Spark的在线教育投融数据可视化分析系统 |爬虫|大数据|大屏|预测|深度学习|数据分析|数据挖掘
  • Packets Frames 数据包和帧
  • 大数据存储域——Hive数据仓库工具
  • 数据结构---二级指针(应用场景)、内核链表、栈(系统栈、实现方式)、队列(实现方式、应用)