【Java查漏补缺(一)】数组与循环
除了数组与循环,还有方法,讲究看吧!后续练习内容都是连贯的!
Basical Java
数据类型 | 关键字 | 内存占用 | 二进制位数 |
---|---|---|---|
字节型 | byte | 1个字节 | 4位 |
短整型 | short | 2个字节 | 8位 |
整型 | int(常用) | 4个字节 | 32位 |
长整型 | long | 8个字节 | 64位 |
单精度浮点数 | float | 4个字节 | 32位 |
双精度浮点数 | double(常用) | 8个字节 | 64位 |
字符型 | char | 2个字节 | 8位 |
布尔类型 | boolean | 1个字节 | 4位 |
输入和输出
正常的输入和输出没什么好说的。看看下面这句
System.out.println(5 + 5 + "hello" + 5 + 5);
最终的结果是什么?10hello55
java中任意数据和字符串拼接结果一定是个字符串
变量定义
变量的定义方式
有两种定义方式:玩了这么久的Java,才知道这玩意叫语法糖。
//语法糖方式定义
int a = 1;
// 先声明,后赋值,再使用
int b;
b = 1;
还有嗷,单精度浮点数和长整型数定义的时候要加F(大小写均可)/L(大小写均可)。
类型转换
分为显式类型转换(也叫强转-会损失精度)和隐式类型转换。
1,隐式(小的范围赋值给大的,如int赋值给long
2,显式(大的范围赋值给小的损失精度*
他们两个之间的区别就是计算会不会丢失精度。(强转会丢失精度-大容器放到小容器中)
范围由小到大byte -> short, char -> int -> long -> float -> double boolean不参与**.
int e = 100;
long f = e ; // 隐式类型转化(不会损失精度
System.out.println(f);
float g = 109.3F;
int h = (int) g; // 显式类型转换(强制转换会损失精度
System.out.println(h);
ASCII码表
a - 97
A - 65
0 - 48
System.out.println('a' + 0);
System.out.println('A' + 0);
System.out.println('0');
运算符优先级及三元运算符
// 运算符优先级(从后往前执行)
int i = 10;
int j = i++ + --i + ++i; // 从后往前 10+10+11
System.out.println(i);
System.out.println("算术运算符执行顺序测试结果为:" + j);
//三元运算符
int k = 5 < 3 ? 10 : 18;
System.out.println("三元运算符输出:" + k);
条件判断语句
if - else if 语句
public class Demo02_Mulit_If {
public static void main(String[] args) {
System.out.print("请输入您的年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if (age >= 3 && age <= 5){
System.out.println("可以上幼儿园了!");
} else if (age >=6 && age <=12) {
System.out.println("可以上小学了!");
}else if (age >= 13 && age <= 15){
System.out.println("可以上中学了!");
}else {
System.out.println("没有这样的学校!");
}
}
}
switch判断语句
public class Demo03_Switch {
public static void main(String[] args) {
//case 穿透好不好?看情况
// switch中可以放什么?byte,short,char,int,枚举,String
int month = 10;
switch (month){
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("没有这样的季节!");
}
}
}
for循环与while循环
这里说下死循环的3种实现方式:while(true),for(;true;),for(;;)
还有for循环的快捷键 itar (iterator)
手写冒泡排序-这算是写穿了的一个循环吧
冒泡排序
int[] array = {1, 2, 32, 45, 9, 3}; // 定义数组,静态初始化
// 0 1 2 3 4 5
for (int i = 0; i < array.length - 1; i++) {
// 这里是0,length - 1
for (int j = 0; j < array.length - i - 1; j++) {
// 这里是 0, length -i -1
// 前一个大于后面的一个就交换(到后面,说明元素是由小到大排列的
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
// 循环遍历数组
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ",");
}
for循环打印99乘法表
//演示循环嵌套打印9*9乘法表
for (int i = 1; i <= 9; i++) {
// 1*1 1*2 .. 1*9
for (int j = 1; j <= i; j++) {
System.out.println(i + "*" + j + "=" + (i*j));
}
System.out.println();
}
Scanner详解
步骤:
导包. import java.util.Scanner;
创建对象. Scanner sc = new Scanner(System.in);
调用方法. int num = sc.nextInt();
获取字符串类型用.next()方法
获取int类型用.nextInt()方法
获取字符类型用.nextChar()方法
//Scanner 案例(判断三个小和尚最高身高
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个和尚的身高: ");
int h1 = sc.nextInt();
System.out.println("请输入第二个和尚的身高: ");
int h2 = sc.nextInt();
System.out.println("请输入第三个和尚的身高: ");
int h3 = sc.nextInt();
经典案例Scanner结合三元运算符
// 第一种写法
/*
int temp = h1 > h2 ? h1: h2;
int result = h2 > h3 ? h2: h3;
*/
int result = h1 > h2 ? (h1 > h3 ? h1 : h3): (h2 > h3 ? h2: h3); // 通常情况可以去掉括号
System.out.println("最高身高的和尚为:"+ result);
数组
数组的两种初始化方式:动态初始化静态初始化
动态初始化,指定长度,系统给定默认值
静态初始化,给出初始值,系统决定长度
// 数组定义方式-动态初始化,静态初始化
// 动态初始化,指定长度,系统给定默认值
//默认值:int -> 0, double -> 0.0, boolean -> false, String -> null
int[] arr = new int[3]; // 推荐使用,掌握
// 另一种定义方式
int arr1[] = new int[3]; // new 代表去堆内存中开辟空间
// 静态初始化,给出初始值,系统决定长度
int[] array = {13, 32, 5, 56}; // 推荐使用,掌握
int[] array1 = new int[]{12, 32, 43};
数组的基操
获取数组长度
打印数组最大索引
打印数组元素的地址值
// 数组的基本操作
// 定义一个三个元素的数组
int[] array3 = new int[3];
System.out.println(array3[1]);
array3[1] = 10;
System.out.println(array3[1]);
// 打印数组长度
System.out.println(array3.length);
// 打印数组最大索引
System.out.println(array3.length - 1);
// 打印数组元素的地址值
System.out.println(array3);
关于数组遇到的两个问题 NullPointerException,ArrayIndexOutOfBoundsException
NullPointerException — 数组为空
ArrayIndexOutOfBoundsException — 数组元素不存在
int[] array4 = new int[4];
array4 = null;
int[] array5 = new int[5];
// NullPointerException数组为空
try {
System.out.println(array4[0]);
}catch (Exception e) {
System.out.println(e);
}
// ArrayIndexOutOfBoundsException数组元素不存在
try {
System.out.println(array5[5]);
}catch (Exception e){
System.out.println(e);
}
遍历数组&数组求最值
// 遍历数组
int[] arrx = {11, 22, 33, 44, 55};
// iterator array -> itar(快捷键
for (int i = 0; i < arrx.length; i++) {
System.out.print(arrx[i] + "\t");
}
System.out.println();
//获取数组元素的最值
int[] arry = {5, 15, 2000, 10000, 100, 4000};
int max = arry[0];
for (int i = 0; i < arry.length; i++) {
if (max < arry[i]){
max = arry[i];
}
}
System.out.println("数组最值是: " + max);
方法Method
跟Python中的def 函数名(): 这种函数差不多
把具有独立功能的代码整合到一起, 使其成为具有特殊功能的代码集.
方法的好处: 提高代码的 复用性.
方法的格式
修饰符 返回值的数据类型 方法名(数据类型 参数名1, 数据类型 参数名2) {
方法体;
return 具体的返回值;
}
格式解释: 修饰符: 目前理解为固定格式 public static 返回值的数据类型: 指的是方法执行完毕后, 返回什么类型的结果, 如果明确知道方法没有具体的返回值, 则返回值类型必须写成void 方法名: 就是方法的名字, 要符合小驼峰命名法, 方便我们调用的. 参数列表: 简称形参, 指的是调用方法需要传入什么类型的值. 方法体: 就是以前的逻辑代码(if, for...), 用来完成某些功能的. return: 主要作用是用来结束方法的, 捎带着可以返回方法的执行结果.
注意事项
注意事项: 1. 方法与方法之间是平级关系, 不能嵌套定义. 2. 方法只有被调用才会执行. 3. 定义方法时候, 写的参数列表叫: 形参, 指的是调用方法需要传入什么类型的值. 4. 调用方法的时候, 传入的参数叫: 实参, 指的是实际参与运算的数值.
方法的功能越单一越好, 最好一个方法就做一件事儿.
public class Methods { public static void main(String[] args) { // 需求1: 定义方法, 计算两个整数的和. // 需求2: 方法版的遍历数组 Scanner sc = new Scanner(System.in); System.out.println("请输入第一个整数"); int a = sc.nextInt(); System.out.println("请输入第二个整数"); int b = sc.nextInt(); int result = getSum(a,b); System.out.println("两个数的和为:" + result); int[] arr = {12, 32, 33, 99}; // 定义数组 printArray(arr); } /** * 这是一个文档注释 * @param a 要计算的第一个整数 * @param b 要计算的第二个整数 * @return 方法 的返回值(求和结果 */ public static int getSum(int a, int b){ // 定义方法, 计算两个整数的和. int result = a + b; return result; } public static void printArray(int[] array){ for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } }