Java学习(一)– Java基础
https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=594d36a0860080a36fe599e0b84e5fb2
一、Java概述 1.1 Java特性
Java 语言是面向对象的(oop )
Java 语言是健壮的。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证
Java 语言是跨平台性的 。(即: 一个编译好的 .class 文件可以在多个系统下运行,这种特性称为跨平台)
Java 语言是解释型的
解释性语言:javascript, PHP, Java 编译性语言: c / c++
区别是:解释性语言,编译后的代码,不能直接被机器执行,需要解释器来执行, 编译性语言, 编译后的代码, 可以直接被机器执行: c /c++
1.2 Java运行机制及过程 1.2.1 跨平台性
1.2.2 Java虚拟机 – JVM
JVM Java Virtual Machine
JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在 JDK 中
对于不同的平台,有不同的虚拟机
Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
1.2.3 Java开发工具包 – JDK
JDK Java Development Kit
JDK = JRE + Java 的开发工具集(例如 Javac, Java 编译工具等)
JDK 是提供给 Java 开发人员使用的,其中包含了 java 的开发工具,也包括了 JRE。所以安装了 JDK,就不用在单独安装 JRE 了
1.2.4 Java运行环境 – JRE
JRE Java Runtime Environment
JRE = JVM + Java SE 标准类库 ( Java 的核心类库 )
包括 Java 虚拟机 ( JVM Java Virtual Machine ) 和 Java 程序所需的核心类库等,
如果想要运行一个开发好的 Java 程序,计算机中只需要安装 JRE 即可
1.3 JDK的下载安装
本博客不包含此目的, 请自行百度
1.4 Java 快速入门 键入 main + Enter 快速生成 public static void main(String[] args) {}
1 2 3 4 5 6 7 8 public class Main { public static void main (String[] args) { System.out.println("Hello world!" ); } }
1.4.1 开发步骤
将 Java 代码编写到扩展名为 .java 的文件中
通过 javac 命令对该 java 文件进行编译,生成 .class 文件
通过 java 命令对生成的 class 文件进行运行
1.4.2 运行原理
1.4.3 执行流程
1.4.4 细节说明
Java 源文件扩展名为 .java, 源文件基本组成部分是类 (class)
Java 程序入口是 main() 方法, 书写格式固定: public static void main(String[] args) {}
Java 严格区分大小写
每个语句以 ; 结束
注意大括号 {}
一个源文件中只能有 1 个 public 类, 其他类个数不限
如果源文件中有一个 public 类, 则源文件名要与 public 类名相同
可以将 main 方法写在 非 public 类 中, 运行非 public 类, 入口见就是非 public 类中的 main 方法
1.5 快速学会 Java
1.6 Java 转义字符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Main { public static void main (String[] args) { System.out.println("北京\t 天津\t 上海" ); System.out.println("jack\nsmith\nmary" ); System.out.println("C:\\Windows\\System32\\cmd.exe" ); System.out.println("老韩说:\"要好好学习 java,有前途\"" ); System.out.println("老韩说:\'要好好学习 java,有前途\'" ); System.out.println("韩顺平教育\r 北京" ); } }
1.7 Java 注释 键入 /** + Enter 快速生成文档注释
键入 sout 快速生成 System.out.println();
文档注释不能随便写, 只能使用 Javadoc标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Main { public static void main (String[] args) { int n1 = 10 ; int n2 = 30 ; int sum = n1 + n2; System.out.println("结果=" + sum); } }
Javadoc标签:
标签
描述
示例
@author
标识一个类的作者
@author description
@deprecated
指名一个过期的类或成员
@deprecated description
{@docRoot}
指明当前文档根目录的路径
Directory Path
@exception
标志一个类抛出的异常
@exception exception-name explanation
{@inheritDoc}
从直接父类继承的注释
Inherits a comment from the immediate surperclass.
{@link}
插入一个到另一个主题的链接
{@link name text}
{@linkplain}
插入一个到另一个主题的链接,但是该链接显示纯文本字体
Inserts an in-line link to another topic.
@param
说明一个方法的参数
@param parameter-name explanation
@return
说明返回值类型
@return explanation
@see
指定一个到另一个主题的链接
@see anchor
@serial
说明一个序列化属性
@serial description
@serialData
说明通过writeObject( ) 和 writeExternal( )方法写的数据
@serialData description
@serialField
说明一个ObjectStreamField组件
@serialField name type description
@since
标记当引入一个特定的变化时
@since release
@throws
和 @exception标签一样.
The @throws tag has the same meaning as the @exception tag.
{@value}
显示常量的值,该常量必须是static属性。
Displays the value of a constant, which must be a static field.
@version
指定类的版本
@version info
1.8 DOC 命令 1.8.1 DOC 基本原理
1.8.2 相对路径 & 绝对路径
1.8.3 常用 DOC 命令
dir : 查看当前目录有什么内容
cd : 切换目录、盘符、上一级、根目录 – cd /D c: cd d:\abc\test cd .. cd \
tree : 查看目录树
cls : 清屏
exit : 退出 DOS
md : 创建目录
rd : 删除目录
copy : 拷贝文件
del : 删除文件
echo : 输入内容到文件
move : 剪切
二、变量 2.1 底层原理
在内存中开辟一个地址, 将变量放在此地址, 地址指向变量的值
2.2 变量快速入门 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public class Main { public static void main (String[] args) { int age = 30 ; double score = 88.9 ; char gender = '男' ; String name = "king" ; System.out.println("人的信息如下:" ); System.out.println(name); System.out.println(age); System.out.println(score); System.out.println(gender); int a = 50 ; System.out.println(a); a = 88 ; System.out.println(a); } } class Dog { public static void main (String[] args) { int a = 666 ; } }
2.3 程序中的 + 号
当左右两边都是数值类型, 做加法运算
当左右两边有一个是字符串, 做拼接运算
运算顺序: 从左到右
1 2 3 4 5 6 7 8 public class Main { public static void main (String[] args) { System.out.println(100 + 98 ); System.out.println("100" + 98 ); System.out.println(100 + 3 + "hello" ); System.out.println("hello" + 100 + 3 ); } }
2.4 基本数据类型
整数类型
byte[1]
short[2]
int[4]
long[8]
浮点型
字符型
布尔型
2.5 整数类型
Java 整数类型有固定的范围和字段长度, 不受 OS 影响, 保证 Java 的可移植性
Java 中整型常量默认为 int, 声明 long 时后面加 l 或 L
一般声明 int, 除非太大才用 long
1 byte = 8 bit
类型
占用存储空间
范围
byte [字节]
1 字节
-128 ~127
short [短整型]
2 字节
-(2^15) ~ 2^15 - 1 -32768 ~ 32767
int [整型]
4 字节
-2^31 ~ 2^31 - 1 -2147483648 ~ 2147483647
long [长整型]
8 字节
-2^63 ~ 2^63 - 1
1 2 3 4 5 6 7 8 public class Main { public static void main (String[] args) { int n1 = 1 ; long n3 = 1L ; } }
2.6 浮点类型
关于浮点数在机器中存放形式的简单说明, 浮点数 = 符号位 + 指数位 + 尾数位
尾数部分可能丢失,造成精度损失 (小数都是近似值)
Java 浮点类型也有固定的范围和字段长, 不受 OS 影响
Java 浮点型常量默认为 double, 声明 float 需要在后面加 f 或 F
类型
占用存储空间
范围
float [单精度]
4 字节
-3.403E38 ~ 3.403E38
double [双精度]
8 字节
-1.798E308 ~ 1.798E308
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 public class Main { public static void main (String[] args) { float num2 = 1.1F ; double num3 = 1.1 ; double num4 = 1.1f ; double num5 = .123 ; System.out.println(num5); System.out.println(5.12e2 ); System.out.println(5.12E-2 ); double num9 = 2.1234567851 ; float num10 = 2.1234567851F ; System.out.println(num9); System.out.println(num10); double num11 = 2.7 ; double num12 = 8.1 / 3 ; System.out.println(num11); System.out.println(num12); if ( num11 == num12) { System.out.println("num11 == num12 相等" ); } if (Math.abs(num11 - num12) < 0.000001 ) { System.out.println("差值非常小,到我的规定精度,认为相等..." ); } System.out.println(Math.abs(num11 - num12)); double num13 = 2.7 ; double num14 = 2.7 ; if ( num13 == num14) { System.out.println("num13 == num14 相等" ); } } }
2.7 字符类型
字符类型可以表示单个字符,字符类型是 char,char 是两个字节(可以存放汉字),多个字符我们用字符串 String
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class Main { public static void main (String[] args) { char c1 = 97 ; System.out.println(c1); char c2 = 'a' ; System.out.println((int )c2); char c3 = '韩' ; System.out.println((int )c3); char c4 = 38889 ; System.out.println(c4); char c5 = 'b' + 1 ; System.out.println((int )c5); System.out.println(c5); char c6 = '\t' ; } }
2.8 布尔类型
只允许 true 和 false , 不允许使用 0 或 非0 来取代 (与 C语言 不一样)
boolean 类型占 1 个字节
1 2 3 4 5 6 7 8 9 10 11 12 public class Main { public static void main (String[] args) { boolean isPass = true ; if (isPass == true ) { System.out.println("考试通过,恭喜" ); } else { System.out.println("考试没有通过,下次努力" ); } } }
2.9 字符编码表
ASCII 一个字节表示, 共 128 个字符, 实际可以用 256 个, 只用了 128 个
Unicode 使用两个字节表示字符, 汉子与字母都是两个字节, 兼容 ASCII 码
优点: 没有乱码问题, 世界上所有符号都有编码
缺点: 浪费空间
uft-8 Unicoude 的改进, 字母使用 1 个字节, 汉字使用 3 个字节
优点: 大小可变, 使用 1-6个字节表示一个符号, 根据不同的符号而变化字节长度
2.10 Java API 文档
2.11 基本数据类型自动转换
进行赋值或运算时, 精度小的类型会自动转为精度大的类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public class Main { public static void main (String[] args) { int n1 = 10 ; float d1 = n1 + 1.1F ; byte b1 = 10 ; byte b2 = 1 ; byte b3 = 2 ; short s1 = 1 ; int s2 = b2 + s1; boolean pass = true ; byte b4 = 1 ; short s3 = 100 ; int num200 = 1 ; float num300 = 1.1F ; double num500 = b4 + s3 + num200 + num300; } }
2.12 基本数据类型自动转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class Main { public static void main (String[] args) { int x = (int )(10 *3.5 +6 *1.5 ); System.out.println(x); char c1 = 100 ; int m = 100 ; char c3 = (char )m; System.out.println(c3); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 判断是否能够通过编译 1. short s = 12 ; s= s-9 ; 2. byteb = 10 ; b = b+11 ; b = (byte )(b+11 ); 3. char c = 'a' ; int i = 16 ; floatd = .314F ; double result = c + i + d; 4. byte b = 16 ; short s = 14 ; short t = S + b;
2.13 基本数据类型和 String 类型的转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public class Main { public static void main (String[] args) { int n1 = 100 ; float f1 = 1.1F ; double d1 = 4.5 ; boolean b1 = true ; String s1 = n1 + "" ; String s2 = f1 + "" ; String s3 = d1 + "" ; String s4 = b1 + "" ; System.out.println(s1 + " " + s2 + " " + s3 + " " + s4); String s5 = "123" ; int num1 = Integer.parseInt(s5); double num2 = Double.parseDouble(s5); float num3 = Float.parseFloat(s5); long num4 = Long.parseLong(s5); byte num5 = Byte.parseByte(s5); boolean b = Boolean.parseBoolean("true" ); short num6 = Short.parseShort(s5); System.out.println("===================" ); System.out.println(num1); System.out.println(num2); System.out.println(num3); System.out.println(num4); System.out.println(num5); System.out.println(num6); System.out.println(b); System.out.println(s5.charAt(0 )); String str = "hello" ; int n10 = Integer.parseInt(str); System.out.println(n1); } }
三、运算符 3.1 算数运算符
对数值类型的变量进行运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 public class Main { public static void main (String[] args) { System.out.println(10 / 4 ); System.out.println(10.0 / 4 ); double d = 10 / 4 ; System.out.println(d); System.out.println(10 % 3 ); System.out.println(-10 % 3 ); System.out.println(10 % -3 ); System.out.println(-10 % -3 ); int i = 10 ; i++; ++i; System.out.println("i=" + i); int j = 8 ; int k = j++; System.out.println("k=" + k + "j=" + j); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class Main { public static void main (String[] args) { int i1 = 1 ; i1 = i++; System.out.println(i1); int i2 = 1 ; i2 = ++i2; System.out.println(i2); int i3 = 10 ; int i4 = 20 ; int i = i3++; System.out.print("i=" + i); System.out.println("i2=" + i4); i = --i4; System.out.print("i=" + i); System.out.println("i2=" + i4); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public class Main { public static void main (String[] args) { int days = 25911 ; int weeks = days / 7 ; int leftDays = days % 7 ; System.out.println(days + "天 合" + weeks + "星期零" + leftDays + "天" ); double huaShi = 1234.6 ; double sheShi = 5.0 / 9 * (huaShi - 100 ); System.out.println("华氏温度" + huaShi + " 对应的摄氏温度=" + sheShi); } }
3.2 关系(比较)运算符
关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
关系表达式 经常用在 if 结构的条件中或循环结构的条件中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Main { public static void main (String[] args) { int a = 9 ; int b = 8 ; System.out.println(a > b); System.out.println(a >= b); System.out.println(a <= b); System.out.println(a < b); System.out.println(a == b); System.out.println(a != b); boolean flag = a > b; System.out.println("flag=" + flag); } }
3.3 逻辑运算符
用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。
a&b : & 叫逻辑与: 规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
a|b : | 叫逻辑或, 规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
!a : 叫取反,或者非运算。当 a 为 true, 则结果为 false; 当 a 为 false 是,结果为 true
a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 public class Main { public static void main (String[] args) { int age = 50 ; if (age > 20 && age < 90 ) { System.out.println("ok100" ); } if (age > 20 & age < 90 ) { System.out.println("ok200" ); } int a = 4 ; int b = 9 ; if (a < 1 & ++b < 50 ) { System.out.println("ok300" ); } System.out.println("a=" + a + " b=" + b); int age = 50 ; if (age > 20 || age < 30 ) { System.out.println("ok100" ); } if (age > 20 | age < 30 ) { System.out.println("ok200" ); } int a = 4 ; int b = 9 ; if ( a > 1 || ++b > 4 ) { System.out.println("ok300" ); } System.out.println("a=" + a + " b=" + b); System.out.println(60 > 20 ); System.out.println(!(60 > 20 )); boolean b = (10 > 1 ) ^ ( 3 > 5 ); System.out.println("b=" + b); System.out.println( (4 < 1 ) ^ (6 > 3 ) ); } }
3.4 赋值运算符
基本赋值运算符 =
复合赋值运算符 += ,-= ,*= , /= ,%=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Main { public static void main (String[] args) { int num = 20 ; int num2= 78 * 34 - 10 ; int num3 = a; int n1 = 10 ; n1 += 4 ; System.out.println(n1); n1 /= 3 ; System.out.println(n1); byte b = 3 ; b += 2 ; b++; } }
3.5 三元运算符
条件表达式 ? 表达式 1: 表达式 2
如果条件表达式为 true,运算后的结果是表达式 1;
如果条件表达式为 false,运算后的结果是表达式 2;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Main { public static void main (String[] args) { int a = 10 ; int b = 99 ; int result = a > b ? a++ : b--; System.out.println("result=" + result); System.out.println("a=" + a); System.out.println("b=" + b); int c = 3 ; int d = 8 ; int e = c > d ? (int )1.1 : (int )3.4 ; double f = c > d ? c : d + 3 ; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public class Main { public static void main (String[] args) { int n1 = 553 ; int n2 = 33 ; int n3 = 123 ; int max1 = n1 > n2 ? n1 : n2; int max2 = max1 > n3 ? max1 : n3; System.out.println("最大数=" + max2); int abcclass = 10 ; int n = 40 ; int N = 50 ; System.out.println("n=" + n); System.out.println("N=" + N); int abc = 100 ; int aBc = 200 ; int goto1 = 10 ; } }
3.6 运算符优先级
3.7 键盘输入语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 import java.util.Scanner;public class Main { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); System.out.println("请输入名字" ); String name = myScanner.next(); System.out.println("请输入年龄" ); int age = myScanner.nextInt(); System.out.println("请输入薪水" ); double sal = myScanner.nextDouble(); System.out.println("人的信息如下:" ); System.out.println("名字=" + name + " 年龄=" + age + " 薪水=" + sal); String str = myScanner.nextLine(); String str = myScanner.next(); String str = myScanner.next().charAt(0 ); byte a1= myScanner.nextByte(); short a2= myScanner.nextShort(); int a3 = myScanner.nextInt(); long a4 = myScanner.nextLong(); float a5 = myScanner.nextFloat(); double a6 = myScanner.nextDouble(); boolean a7 = myScanner.nextBoolean(); sc.close(); } }
3.8 进制
二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
十进制:0-9 ,满 10 进 1。
八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写
3.8.1 各种进制转十进制
从最低位 (右边) 开始, 将每个位上的数提取出来, 乘以 2 的 (位数 - 1)次方, 然后求和
从最低位 (右边) 开始, 将每个位上的数提取出来, 乘以 8 的 (位数 - 1)次方, 然后求和
从最低位 (右边) 开始, 将每个位上的数提取出来, 乘以 16 的 (位数 - 1)次方, 然后求和
3.8.2 十进制转各种进制
短除
将该数不断除以 2, 直到商为 0 为止, 然后将每步得到的余数倒过来, 就是对应二进制
将该数不断除以 8, 直到商为 0 为止, 然后将每步得到的余数倒过来, 就是对应八进制
将该数不断除以 16, 直到商为 0 为止, 然后将每步得到的余数倒过来, 就是对应十六进制
3.8.3 二进制转各种进制
从低位开始,将二进制数每 3 位一组,转成对应的八进制数即可
从低位开始,将二进制数每 4 位一组,转成对应的十六进制数即可
3.8.4 各种进制转二进制
将八进制数每 1 位,转成对应的一个 3 位的二进制数即可
将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可
3.9 原码、反码、补码 对于有符号的而言:
二进制的最高位是符号位: 0表示正数,1表示负数
正数的原码,反码,补码都一样 (三码合一)
负数的反码 = 它的原码符号位不变,其它位取反(0->1,1->0)
负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
0的反码,补码都是0
java没有无符号数,换言之,java中的数都是有符号的
在计算机运算的时候,都是以补码的方式来运算 的.
当我们看运算结果的时候,要看他的原码 (重点)
3.10 位运算符
按位与 &: 两位全为 1 , 结果为 1 , 否则为 0
按位或 |: 两位有一个为 1 , 结果为 1 , 否则为 0
按位异或 ^: 两位一个为 0 , 一个为 1 , 结果为 1 , 否则为 0
按位取反 ~: 0->1 ,1->0
算术右移 >>:低位溢出, 符号位不变, 并用符号位补溢出的高位
算术左移 <<: 符号位不变, 低位补 0
逻辑右移 / 无符号右移 >>>: 低位溢出,高位补 0
特别说明:没有 <<< 符号
四、程序控制结构 4.1 顺序控制 从上到下执行, 变量采取前向引用 的格式
4.2 分支控制
如果判断的具体数值不多 ,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可以使用,建议使用 swtich 语句
其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广
4.2.1 if-else 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import java.util.Scanner;public class If01 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); System.out.println("请输入年龄" ); int age = myScanner.nextInt(); if (age > 18 ) { System.out.println("你年龄大于18,要对自己的行为负责,送入监狱" ); } System.out.println("程序继续..." ); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import java.util.Scanner;public class If02 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); System.out.println("请输入年龄" ); int age = myScanner.nextInt(); if (age > 18 ) { System.out.println("你年龄大于18,要对自己的行为负责,送入监狱" ); } else { System.out.println("你的年龄不大这次放过你了" ); } System.out.println("程序继续..." ); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 public class IfExercise01 { public static void main (String[] args) { double d1 = 33.5 ; double d2 = 2.6 ; if (d1 > 10.0 && d2 < 20.0 ) { System.out.println("两个数和=" + (d1 + d2)); } int num1 = 10 ; int num2 = 1 ; int sum = num1 + num2; if (sum % 3 == 0 && sum % 5 == 0 ) { System.out.println("和可以被3又能被5整除" ); } else { System.out.println("和不能被3和5整除.." ); } int year = 2028 ; if ( (year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ) { System.out.println(year + " 是 闰年" ); } else { System.out.println(year + " 不是 闰年" ); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 import java.util.Scanner;public class If03 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); System.out.println("请输入信用分(1-100):" ); int grade = myScanner.nextInt(); if (grade >=1 && grade <= 100 ) { if (grade == 100 ) { System.out.println("信用极好" ); } else if (grade > 80 && grade <= 99 ) { System.out.println("信用优秀" ); } else if (grade >= 60 && grade <= 80 ) { System.out.println("信用一般" ); } else { System.out.println("信用不及格" ); } } else { System.out.println("信用分需要在1-100,请重新输入:)" ); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import java.util.Scanner;public class NestedIf { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); System.out.println("请输入该歌手的成绩" ); double score = myScanner.nextDouble(); if ( score > 8.0 ) { System.out.println("请输入性别" ); char gender = myScanner.next().charAt(0 ); if ( gender == '男' ) { System.out.println("进入男子组" ); } else if (gender == '女' ) { System.out.println("进入女子组" ); } else { System.out.println("你的性别有误,不能参加决赛~" ); } } else { System.out.println("sorry ,你被淘汰了~" ); } } }
4.2.2 switch
switch 表达式的数据类型要与 case 后的常量类型一致, 或者是可以进行隐式转换 (表达式类型转常量类型) 的类型, 不然怎么比较
switch 表达式的返回值必须是 byte, short, int, char, enum, String
case 后的值必须是常量, 不能是变量
default 可选, 但是必须加上
如果没有在 case 分支后写 break, 就会从当前分支一直执行到底, 除非中途碰到 break
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import java.util.Scanner;public class Switch01 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); System.out.println("请输入一个字符(a-g)" ); char c1 = myScanner.next().charAt(0 ); switch (c1) { case 'a' : System.out.println("今天星期一,猴子穿新衣" ); break ; case 'b' : System.out.println("今天星期二,猴子当小二" ); break ; case 'c' : System.out.println("今天星期三,猴子爬雪山.." ); break ; default : System.out.println("你输入的字符不正确,没有匹配的" ); } System.out.println("退出了switch ,继续执行程序" ); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 public class SwitchDetail { public static void main (String[] args) { char c = 'b' ; char c2 = 'c' ; switch (c) { case 'a' : System.out.println("ok1" ); break ; case 'b' : System.out.println("ok2" ); break ; default : System.out.println("ok3" ); } System.out.println("退出了switch,继续执行.." ); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 import java.util.Scanner;public class SwitchExercise { public static void main (String[] args) { double score = 1.1 ; if ( score >= 0 && score <= 100 ) { switch ((int )(score / 60 )) { case 0 : System.out.println("不合格" ); break ; case 1 : System.out.println("合格" ); break ; } } else { System.out.println("输入的成绩在0-100" ); } Scanner myScanner = new Scanner (System.in); System.out.println("输入月份" ); int month = myScanner.nextInt(); switch (month) { 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 ; case 1 : case 2 : case 12 : System.out.println("这是冬季" ); break ; default : System.out.println("你输入的月份不对(1-12)" ); } } }
4.3 循环控制 4.3.1 for 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 public class ForDetail { public static void main (String[] args) { int count = 3 ; for (int i = 0 ,j = 0 ; i < count; i++, j += 2 ) { System.out.println("i=" + i + " j=" + j); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 public class ForExercise { public static void main (String[] args) { int count = 0 ; int sum = 0 ; int start = 10 ; int end = 200 ; int t = 5 ; for (int i = start; i <= end; i++) { if ( i % t == 0 ) { System.out.println("i=" + i); count++; sum += i; } } System.out.println("count=" + count); System.out.println("sum=" + sum); } }
4.3.2 while 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class WhileExercise { public static void main (String[] args) { int i = 1 ; int endNum = 100 ; while ( i <= endNum) { if ( i % 3 == 0 ) { System.out.println("i=" + i); } i++; } System.out.println("========" ); int j = 40 ; while ( j <= 200 ) { if ( j % 2 == 0 ) { System.out.println("j=" + j); } j++; } } }
4.3.3 do-while 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class DoWhileExercise01 { public static void main (String[] args) { int i = 1 ; int count = 0 ; do { if ( i % 5 == 0 && i % 3 != 0 ) { System.out.println("i=" + i); count++; } i++; }while (i <= 200 ); System.out.println("count=" + count); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util.Scanner;public class DoWhileExercise02 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); char answer = ' ' ; do { System.out.println("老韩使出五连鞭~" ); System.out.println("老韩问:还钱吗?y/n" ); answer = myScanner.next().charAt(0 ); System.out.println("他的回答是" + answer); }while (answer != 'y' ); System.out.println("李三还钱了" ); } }
4.4 多重循环控制 最多不要超过 3 层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 import java.util.Scanner;public class MulForExercise01 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); double totalScore = 0 ; int passNum = 0 ; int classNum = 3 ; int stuNum = 5 ; for ( int i = 1 ; i <= classNum; i++) { double sum = 0 ; for ( int j = 1 ; j <= stuNum; j++) { System.out.println("请数第" +i+"个班的第" +j+"个学生的成绩" ); double score = myScanner.nextDouble(); if (score >= 60 ) { passNum++; } sum += score; System.out.println("成绩为" + score); } System.out.println("sum=" + sum + " 平均分=" + (sum / stuNum)); totalScore += sum; } System.out.println("三个班总分=" + totalScore + " 平均分=" + totalScore / (classNum*stuNum)); System.out.println("及格人数=" + passNum); } }
4.5 打印金字塔 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 public class Stars { public static void main (String[] args) { int totalLevel = 20 ; for (int i = 1 ; i <= totalLevel; i++) { for (int k = 1 ; k <= totalLevel - i; k++ ) { System.out.print(" " ); } for (int j = 1 ;j <= 2 * i - 1 ;j++) { if (j == 1 || j == 2 * i - 1 || i == totalLevel) { System.out.print("*" ); } else { System.out.print(" " ); } } System.out.println("" ); } } }
4.6 跳转控制语句 4.6.1 break 要知道标签是什么东西, 编程的时候一般不写, 但是要知道
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class BreakDetail { public static void main (String[] args) { abc1: for (int j = 0 ; j < 4 ; j++){ abc2: for (int i = 0 ; i < 10 ; i++){ if (i == 2 ){ break abc1 ; } System.out.println("i = " + i); } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import java.util.Scanner;public class BreakExercise02 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); String name = "" ; String passwd = "" ; int chance = 3 ; for ( int i = 1 ; i <= 3 ; i++) { System.out.println("请输入名字" ); name = myScanner.next(); System.out.println("请输入密码" ); passwd = myScanner.next(); if ("丁真" .equals(name) && "666" .equals(passwd)) { System.out.println("恭喜你,登录成功~" ); break ; } chance--; System.out.println("你还有" + chance + "次登录机会" ); } } }
4.6.2 continue 也有标签这个东西
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class ContinueDetail { public static void main (String[] args) { label1: for (int j = 0 ; j < 2 ; j++){ label2: for (int i = 0 ; i < 10 ; i++){ if (i == 2 ){ continue label1; } System.out.println("i = " + i); } } } }
4.6.3 return 方法中的 return 表示退出方法
main 函数中的 return 表示结束程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Return01 { public static void main (String[] args) { for (int i=1 ;i<=5 ;i++){ if (i==3 ) { System.out.println("韩顺平教育 " +i); return ; } System.out.println("Hello World!" ); } System.out.println("go on.." ); } }
五、数组、排序和查找 5.1 数组 5.1.1 数组基础 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 import java.util.Scanner;public class Array02 { public static void main (String[] args) { double scores[] ; scores = new double [5 ]; Scanner myScanner = new Scanner (System.in); for ( int i = 0 ; i < scores.length; i++) { System.out.println("请输入第" + (i+1 ) +"个元素的值" ); scores[i] = myScanner.nextDouble(); } System.out.println("==数组的元素/值的情况如下:===" ); for ( int i = 0 ; i < scores.length; i++) { System.out.println("第" + (i+1 ) +"个元素的值=" + scores[i]); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 public class ArrayDetail { public static void main (String[] args) { double [] arr2 = {1.1 , 2.2 , 3.3 , 60.6 , 100 }; String[] arr3 = {"北京" ,"jack" ,"milan" }; short [] arr4 = new short [3 ]; System.out.println("=====数组arr4=====" ); for (int i = 0 ; i < arr4.length; i++) { System.out.println(arr4[i]); } int [] arr = new int [5 ]; } }
5.1.2 数组赋值机制 (※) 没有 new 过 (初始化) 的数组没有独立空间, 只是声明了而已
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class ArrayAssign { public static void main (String[] args) { int n1 = 10 ; int n2 = n1; n2 = 80 ; System.out.println("n1=" + n1); System.out.println("n2=" + n2); int [] arr1 = {1 , 2 , 3 }; int [] arr2 = arr1; arr2[0 ] = 10 ; System.out.println("====arr1的元素====" ); for (int i = 0 ; i < arr1.length; i++) { System.out.println(arr1[i]); } System.out.println("====arr2的元素====" ); for (int i = 0 ; i < arr2.length; i++) { System.out.println(arr2[i]); } } }
5.1.3 数组拷贝 新建一个数组, 开辟一个独立的空间, 将原数组的值赋值到新的数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 public class ArrayCopy { public static void main (String[] args) { int [] arr1 = {10 ,20 ,30 }; int [] arr2 = new int [arr1.length]; for (int i = 0 ; i < arr1.length; i++) { arr2[i] = arr1[i]; } arr2[0 ] = 100 ; System.out.println("====arr1的元素====" ); for (int i = 0 ; i < arr1.length; i++) { System.out.println(arr1[i]); } System.out.println("====arr2的元素====" ); for (int i = 0 ; i < arr2.length; i++) { System.out.println(arr2[i]); } } }
5.1.4 数组翻转 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class ArrayReverse { public static void main (String[] args) { int [] arr = {11 , 22 , 33 , 44 , 55 , 66 }; int temp = 0 ; int len = arr.length; for ( int i = 0 ; i < len / 2 ; i++) { temp = arr[len - 1 - i]; arr[len - 1 - i] = arr[i]; arr[i] = temp; } System.out.println("===翻转后数组===" ); for (int i = 0 ; i < arr.length; i++) { System.out.print(arr[i] + "\t" ); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class ArrayReverse02 { public static void main (String[] args) { int [] arr = {11 , 22 , 33 , 44 , 55 , 66 }; int [] arr2 = new int [arr.length]; for (int i = arr.length - 1 , j = 0 ; i >= 0 ; i--, j++) { arr2[j] = arr[i]; } arr = arr2; System.out.println("====arr的元素情况=====" ); for (int i = 0 ; i < arr.length; i++) { System.out.print(arr[i] + "\t" ); } } }
5.1.5 数组扩容 新建一个数组之后扩容, 再将原数组名指向新的数组, 原数组空间被垃圾回收机制回收销毁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 import java.util.Scanner;public class ArrayAdd02 { public static void main (String[] args) { Scanner myScanner = new Scanner (System.in); int [] arr = {1 ,2 ,3 }; do { int [] arrNew = new int [arr.length + 1 ]; for (int i = 0 ; i < arr.length; i++) { arrNew[i] = arr[i]; } System.out.println("请输入你要添加的元素" ); int addNum = myScanner.nextInt(); arrNew[arrNew.length - 1 ] = addNum; arr = arrNew; System.out.println("====arr扩容后元素情况====" ); for (int i = 0 ; i < arr.length; i++) { System.out.print(arr[i] + "\t" ); } System.out.println("是否继续添加 y/n" ); char key = myScanner.next().charAt(0 ); if ( key == 'n' ) { break ; } }while (true ); System.out.println("你退出了添加..." ); } }
5.1.6 数组缩减 新建一个数组之后缩减, 再将原数组名指向新的数组, 原数组空间被垃圾回收机制回收销毁
5.1.7 应用案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public class ArrayExercise01 { public static void main (String[] args) { char [] chars = new char [26 ]; for ( int i = 0 ; i < chars.length; i++) { chars[i] = (char )('A' + i); } System.out.println("===chars数组===" ); for ( int i = 0 ; i < chars.length; i++) { System.out.print(chars[i] + " " ); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class ArrayExercise02 { public static void main (String[] args) { int [] arr = {4 ,-1 ,9 ,10 ,23 }; int max = arr[0 ]; int maxIndex = 0 ; for (int i = 1 ; i < arr.length; i++) { if (max < arr[i]) { max = arr[i]; maxIndex = i; } } System.out.println("max=" + max + " maxIndex=" + maxIndex); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 public class Homework04 { public static void main (String[] args) { int [] arr = {10 , 12 , 45 , 90 }; int insertNum = 111 ; int index = -1 ; for (int i = 0 ; i < arr.length; i++) { if (insertNum <= arr[i]) { index = i; break ; } } if (index == -1 ) { index = arr.length; } int [] arrNew = new int [arr.length + 1 ]; for (int i = 0 , j = 0 ; i < arrNew.length; i++) { if ( i != index ) { arrNew[i] = arr[j]; j++; } else { arrNew[i] = insertNum; } } arr = arrNew; System.out.println("======插入后,arr数组的元素情况======" ); for (int i = 0 ; i < arr.length; i++) { System.out.print(arr[i] + "\t" ); } } }
5.2 排序 5.2.1 内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序。
包括 (交换式排序法、选择式排序法和插入式排序法);
5.2.2 外部排序 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。
包括 (合并排序法和直接合并排序法)
5.2.3 冒泡排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 public class BubbleSort { public static void main (String[] args) { int [] arr = {24 , 69 , 80 , 57 , 13 , -1 , 30 , 200 , -110 }; int temp = 0 ; for ( int i = 0 ; i < arr.length - 1 ; i++) { for ( int j = 0 ; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1 ]) { temp = arr[j]; arr[j] = arr[j+1 ]; arr[j+1 ] = temp; } } System.out.println("\n==第" +(i+1 )+"轮==" ); for (int j = 0 ; j < arr.length; j++) { System.out.print(arr[j] + "\t" ); } } } }
5.3 查找 常用查找:
5.3.1 顺序查找 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import java.util.Scanner;public class SeqSearch { public static void main (String[] args) { String[] names = {"白眉鹰王" , "金毛狮王" , "紫衫龙王" , "青翼蝠王" }; Scanner myScanner = new Scanner (System.in); System.out.println("请输入名字" ); String findName = myScanner.next(); int index = -1 ; for (int i = 0 ; i < names.length; i++) { if (findName.equals(names[i])) { System.out.println("恭喜你找到 " + findName); System.out.println("下标为= " + i); index = i; break ; } } if (index == -1 ) { System.out.println("sorry ,没有找到 " + findName); } } }
5.4 二维数组 5.4.1 二维数组基础 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public class TwoDimensionalArray01 { public static void main (String[] args) { int [][] arr = { {0 , 0 , 0 , 0 , 0 , 0 }, {0 , 0 , 1 , 0 , 0 , 0 }, {0 ,2 , 0 , 3 , 0 , 0 }, {0 , 0 , 0 , 0 , 0 , 0 } }; System.out.println("二维数组的元素个数=" + arr.length); System.out.println("第3个一维数组的第4个值=" + arr[2 ][3 ]); for (int i = 0 ; i < arr.length; i++) { for (int j = 0 ; j < arr[i].length; j++) { System.out.print(arr[i][j] + " " ); } System.out.println(); } } }
5.4.2 二维数组赋值机制 (※) 允许列不相等, 即 new 的时候必须把行确定出来, 列可以后续开辟
本质上是一维数组的每一个元素都是一维数组, 这时候就要把外层的一维数组确定出来
而内层的一维数组可以后续进行创建, 如果没创建, 内存默认为 null, 无伤大雅, 啥都不影响
因此可以动态定义每一行的列数, 没有定义的列均为 null
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class TwoDimensionalArray02 { public static void main (String[] args) { int arr[][]; arr = new int [2 ][3 ]; arr[1 ][1 ] = 8 ; for (int i = 0 ; i < arr.length; i++) { for (int j = 0 ; j < arr[i].length; j++) { System.out.print(arr[i][j] +" " ); } System.out.println(); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public class TwoDimensionalArray03 { public static void main (String[] args) { int [][] arr = new int [3 ][]; for (int i = 0 ; i < arr.length; i++) { arr[i] = new int [i + 1 ]; for (int j = 0 ; j < arr[i].length; j++) { arr[i][j] = i + 1 ; } } System.out.println("=====arr元素=====" ); for (int i = 0 ; i < arr.length; i++) { for (int j = 0 ; j < arr[i].length; j++) { System.out.print(arr[i][j] + " " ); } System.out.println(); } } }
静态初始化就是直接在定义时赋值
类型 数组名[][] = {{值 1,值 2..},{值 1,值 2..},{值 1,值 2..}}
5.4.3 杨辉三角 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 public class YangHui { public static void main (String[] args) { int [][] yangHui = new int [12 ][]; for (int i = 0 ; i < yangHui.length; i++) { yangHui[i] = new int [i+1 ]; for (int j = 0 ; j < yangHui[i].length; j++){ if (j == 0 || j == yangHui[i].length - 1 ) { yangHui[i][j] = 1 ; } else { yangHui[i][j] = yangHui[i-1 ][j] + yangHui[i-1 ][j-1 ]; } } } for (int i = 0 ; i < yangHui.length; i++) { for (int j = 0 ; j < yangHui[i].length; j++) { System.out.print(yangHui[i][j] + "\t" ); } System.out.println(); } } }
5.4.4 二维数组使用细节
一维数组的声明方式有: int[] x 或者 int x[]
二维数组的声明方式有: int[][] y 或者 int[] y[] 或者 int y[][]
二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。
比如: map[][] 是一个二维数组 int map [][] = {{1,2},{3,4,5}}
由 map[0] 是一个含有两个元素的一维数组 ,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组