Java学习笔记(一)
Java入门
04 常见的cmd命令
-
盘符名称 + : :
E:
-
dir:查看当前路径下的内容
dir
-
cd目录:进入单级目录
cd itheima
-
cd…:回退到上一级目录
cd..
-
cd 目录1\目录2\ …:进入多级目录
-
cd\:回退到盘符目录
-
cls:清屏
-
exit:退出命令提示符窗口
Java基础概念
01-02 注释和关键字
注释:对代码进行解释说明,不会参与编译和运行,书写时不要嵌套
- 单行注释:
//注释信息
- 多行注释:
/*注释信息*/
- 文档注释(学习阶段用不到):
/**注释信息*/
关键字:被java赋予了特定含义的英文单词
- 特点:字母全部小写,代码中颜色加亮
03 字面量
类型:整数、小数、字符串、字符、布尔、空
类型 | 说明 |
---|---|
整数 | 不带小数点的数字 |
小数 | 带小数点的数字 |
字符串 | 用双引号括起来的内容 |
字符 | 用单引号括起来的内容 |
布尔 | 布尔值,表示真假 |
空 | 一个特殊的值,空值(null) |
特殊字符:
符号 | 作用 |
---|---|
\t | 制表符,在打印的时候,把前面字符串的长度补齐到8或者8的整数倍。最少补一个,最多补八个 |
public class ValueDemo1{
public static void main(String[] args){
// 整数
System.out.println(666);
System.out.println(666);
// 小数
System.out.println(-3.71);
System.out.println(1.93);
// 字符串
System.out.println("黑马程序员");
System.out.println("尼古拉斯");
// 字符
System.out.println('男');
System.out.println('女');
// 布尔
System.out.println(true);
System.out.println(false);
// 空
// 细节:null不能直接打印,只能用字符串形式打印null
System.out.println("null");
// 制表符
System.out.println("name"+'\t'+"age");
System.out.println("tom"+'\t'+"23");
}
}
04 变量
定义格式:数据类型 变量名 = 数据值;
用法:
- 输出打印
- 参与计算
- 修改记录的值
注意
-
java中同名变量不能重复定义
-
一个变量只能存一个值
-
一条语句可以定义多个变量
-
变量使用前一定要赋值
-
变量的作用域范围
public class VariableDemo1{
public static void main(String[] args){
int a = 10;
System.out.println(a);
int b = 20;
System.out.println(a+b);
a = 50;
int c=100,d=200,e=300;
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
08 数据类型
-
基本数据类型:
数据类型 关键字 内存占用 整数 byte、short、int、long 1、2、4、8 浮点数 float、double 4、8 字符 char 2 布尔 boolean 1
10 标识符
- 定义:给类、方法、变量等起的名字
标识符命名规范
- 由数字、字母、下划线和美元符($)组成
- 不能以数字开头,不能包含特殊符号
- 不能是关键字
- 区分大小写
建议
- 小驼峰命名法:方法、变量
- 标识符是一个单词的时候,全部小写
- 标识符由多个单词组成时,第一个单词首字母小写,其他单词首字母大写
- 大驼峰命名法:类名
- 标识符是一个单词的时候,首字母大写
- 标识符由多个单词组成的时候,每个单词的首字母都大写
11 键盘录入
步骤
- 导包:Scanner这个类在哪
- 创建对象:表示我要开始用Scanner这个类了
- 接收数据:开始干活
import java.util.Scanner;
public class ScannerDemo1{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入整数:");
int i=sc.nextInt();
System.out.println(i);
}
}
运算符
01-03 算数运算符
运算符:对字面量或者变量进行操作的符号
表达式:用表达式把字面量或者变量连接起来,符合java语法的式子
符号 | 作用 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模、取余 |
-
在计算时,如果有小数参与,结果可能不精确
-
整数操作只能得到整数,想要得到小数,必须有浮点数参与运算
-
练习:获取一个三位数的各个位数
- 公式:
- 个位:数字%10
- 十位:数字/10%10
- 百位:数字/10/10%10
- 千位:数字/10/10/10%10
- 依此类推…
- 公式:
04-05 隐式转换和强制转换
- 数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算
类型转换的分类
- 隐式转换(自动类型提升)
- 把一个取值范围小的数据,转成取值范围大的数据
- byte、short、char三种类型的数据在运算的时候,都会直接提升为int,然后再进行运算
- 取值范围:byte<short<int<long<float<double
- 强制转换
- 如果把一个取值范围大的数据,赋值给取值范围小的变量,是不允许直接赋值的。如果要这样做就必须加入强制转换
- 格式:
目标数据类型 变量名 = (目标数据类型)被强转的数据;
- 例子:
double a =12.3; int b=(int)a;
- 当要转换的数据过大时,可能出现错误(越界)
06 字符串和字符的加操作
字符串的"+"操作
- 当"+“操作中出现字符串时,这个”+"是字符串连接符,而不是算术运算符。会将前后数据进行拼接,产生一个新的字符串
- 连续的进行"+"操作符,从左到右逐个执行
字符相加
- 相加之前,会按照ascii码表转换为数字再进行运算
07 自增自减运算符
符号 | 作用 |
---|---|
++ | 变量的值加一 |
– | 变量的值减一 |
-
参与计算时:写在前面先使用后操作,写在后面先操作后使用
-
单独使用时:++和–是放在变量的前边还是后边,结果都一样
08 赋值运算符和关系运算符
赋值运算符
符号 | 作用 |
---|---|
= | 赋值 |
+= | 加后赋值 |
-= | 减后赋值 |
*= | 乘后赋值 |
/= | 除后赋值 |
%= | 取余后赋值 |
关系运算符
符号 | 作用 |
---|---|
== | 相等 |
! = | 不相等 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
- 关系运算符的结果都是boolean类型,要么是true,要么是false
09 逻辑运算符
符号 | 作用 |
---|---|
& | 逻辑与,并且 |
| | 逻辑或,或者 |
^ | 逻辑异或,相同为false,不同为true |
! | 逻辑非,取反 |
10 短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 结果与&相同,但是有短路效果 |
|| | 短路或 | 结果与|相同,但是具有短路效果 |
- 短路效果:当左边的表达式能确定最终结果,那么右边就不用参与运行了
package com.itheima.arithmeticoperator;
import java.util.Scanner;
public class DuanluTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
boolean result = a == 6 || b == 6 || (a + b) % 6 == 0;
System.out.println(result);
}
}
11 三元运算符和运算符优先级
三元运算符
- 格式:
关系表达式?表达式1:表达式2;
- 意义:先判断关系表达式,如果结果为真,则执行表达式1,结果为假,则执行表达式2
运算符优先级
判断和循环
01 流程控制语句
通过一些语句,控制程序的执行流程
- 顺序结构(默认)
- 循环结构
- 分支结构
02 if第一种格式和注意事项
-
格式:
if(关系表达式){ 语句体; }
-
如果对布尔类型的变量进行判断,不要用==号
-
在语句体内,如果只有一句代码,大括号可以省略不写,直接把变量写在小括号中即可
03 if的第二种格式
-
格式
if(关系表达式){ 语句体1; } else{ 语句体2; }
-
流程
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的其他语句
04 if的第三种格式
-
格式
if(关系表达式1){ 语句体1; } else if(关系表达式2){ 语句体2; } ... else{ 语句体n+1; }
05 switch语句
-
格式
switch(格式){ case 值1: case 值2: ... default: 语句体1; break; }
-
流程
- 首先计算表达式的值
- 依次和case后面的值进行比较,如果有相应的值,就会执行对应的语句,在执行过程中,遇到break就会结束
- 如果所有case后面的值和表达式的值都不匹配,就会执行default里面的语句,然后结束整个switch语句
-
注意
- 表达式取值为byte、short、int、char,JDK5以后可以是枚举,JDK7后面可以是String
- case后面的值不能重复
- 在case的语句块最后添加break才会停止,否则一直执行到default前的语句
06 switch的扩展知识
-
default可以省略,但不建议
-
default一般写在最下方
-
switch新特性:JDK12后增加了一种新的格式,可以用于省略break语句
switch(关系表达式){ case 值1->{ 语句体1; } case 值2->{ 语句体2; } ... default ->{ 语句体n+1; } } //语句体中只有一句话的时候,可以省略大括号
循环和判断
07 循环语句-for
-
格式
for(int i=1;i<=10;i++){ System.out.println("HelloWorld"); }
-
流程
- 1.执行初始化语句
- 2.执行条件判断语句,如果是false,结束循环,如果是true,执行循环体语句
- 3.执行条件控制语句
- 4.返回第二步
09 循环语句-while
-
格式
初始化语句; while(条件判断语句){ 循环体语句; 条件控制语句; }
-
for循环和while循环的对比
- 相同:运行规则相同
- 不同:
- for循环中,控制循环的变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- while循环中,控制循环的变量,对应while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- for循环中:知道循环次数或者循环的范围
- while循环中:不知道循环的次数和范围,只知道结束循环的条件
10 两道力扣算法题目和do-while循环
-
回文数
package tset; import java.util.Scanner; public class Test16 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = 121; int ans=x; int num=0; while(x!=0){ int ge = x % 10; x /= 10; num=num*10+ge; } System.out.println(num); if(num == ans){ System.out.println(ans+"是回文数"); } else{ System.out.println(ans+"不是回文数"); } } }
-
求商和余数
package tset; public class Test17 { public static void main(String[] args) { int divided = 100; int divisor = 10; int count=0; while(divided>=divisor){ divided-=divisor; count++; } System.out.println("余数为:"+divided); System.out.println("商是:"+count); } }
do-while循环
-
格式
初始化语句; do{ 循环体语句; 条件控制语句; }while(条件判断语句);
- 特点先执行后判断
循环高级综合练习
01 无限循环和跳转控制语句
无限循环
-
for循环格式无限循环
for(;;){ System.out.println("学习"); }
-
while循环格式无限循环
while(true){ System.out.println("学习"); }
-
do-while循环格式无限循环
do{ System.out.println("学习"); }while(true);
-
注意事项
- 无限循环的下面不能再写其他代码了,因为循环不停止就无法执行下面的代码
跳转控制语句
- continue语句
- 跳过本次循环,进入下一轮循环
- break语句
- 结束整个循环,执行下面的语句
02 逢7过
package com.itheima05.www.test;
public class LoopTest1 {
public static void main(String[] args) {
for(int i=1;i<=100;i++){
if(i%7==0||i%10==7||i/10%10==7){
System.out.println("过");
continue;
}
System.out.println(i);
}
}
}
03 平方根
package test;
import java.util.Scanner;
public class LoopTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
for(int i=1;i<=number/2;i++){
if(i*i==number){
System.out.println(i+"是"+number+"的平方根");
break;
}
if(i*i>number){
System.out.println(i-1+"是"+number+"的平方根的整数部分");
break;
}
}
}
}
04 判断质数
package test;
import java.util.Scanner;
public class LoopTest3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
boolean flag = true;
for (int i = 2; i <= number - 1; i++) {
if (number % i == 0) {
System.out.println(number + "不是质数");
flag = false;
break;
}
}
if (flag) {
System.out.println(number + "是一个质数");
}
}
}
05 猜数字
package test;
import java.util.Random;
import java.util.Scanner;
public class LoopTest4 {
public static void main(String[] args) {
Random rand = new Random();
Scanner sc = new Scanner(System.in);
int number = rand.nextInt(10);
while(true){
int guess = sc.nextInt();
if(guess == number){
System.out.println("Yes");
break;
}
else if(guess < number){
System.out.println("too low");
}
else{
System.out.println("too high");
}
}
}
数组
01 数组的概述和静态初始化
数组
-
数组定义:一种容器,可以用于存储同种数据类型的多个值
-
数组容器在存储数据的时候,需要结合隐式转换考虑
-
例如:int类型的数组容器(byte short int)
-
例如:double类型的数组容器(byte short int long float double)
-
建议容器的类型和存储的数据类型保持一致
-
定义格式
//格式1
数据类型[]=数组名;
//格式2
数据类型 数组名[];
数组的初始化
- 初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程
- 分类:
- 静态初始化
- 简化格式:
数据类型[]数组名={元素1,元素2,...}
- 简化格式:
- 动态初始化
- 静态初始化
02 数组的元素访问
数组元素访问
- 格式:
数组名[索引];
- 索引:也叫做下标、角标
- 索引特点:从零开始,逐个+1递增
package com.array;
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int a=arr[0];
System.out.println(a);
System.out.println(arr[1]);
//存储数据到数组中
arr[0]=100;
System.out.println(arr[0]);
}
}
03 数组的遍历和三道练习
数组遍历
int[] a={1,2,3,4,5};
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
04 数组的动态初始化
动态初始化
- 定义:初始化时只指定数组长度,由系统为数组分配初始值
- 格式:
数据类型[] 数组名=new 数据类型[数组长度];
动态初始化和静态初始化的区别
- 动态初始化
- 只明确元素个数,不清楚具体数值
- 静态初始化
- 需求中已经明确具体的数据
数组常见问题
- 索引越界问题:最小索引为
0
,最大索引为数组长度-1
05 数组练习1
求最值
package test;
public class ArrayTest4 {
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7,8,9,10};
int max = a[0];
for(int i=0;i<a.length;i++){
if(a[i]>max){
max=a[i];
}
}
System.out.println(max);
}
}
06 数组练习2
求和
package test;
import java.util.Random;
public class ArrayTest5 {
public static void main(String[] args) {
int[] arr = new int[10];
Random r = new Random();
for(int i=0;i<arr.length;i++){
int number=r.nextInt(100)+1;
arr[i]=number;
}
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
System.out.print(arr[i]+" ");//将数组中数据打印在同一行上
}
System.out.println(sum);
int avg=sum/arr.length;
System.out.println(avg);
int ans = 0;
for(int i=0;i<arr.length;i++){
if(avg>arr[i]){
ans++;
}
}
System.out.println("比平均数小的数字有"+ans+"个");
}
}
将数据打印在同一行上
System.out.print(打印内容+"");
07 数组练习3
package test;
public class ArrayTest6 {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
for(int i=0,j=arr.length-1;i<j;i++,j--){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
数组练习4
打乱数组顺序
package test;
import java.util.Random;
public class ArrayTest7 {
public static void main(String[] args) {
Random rand = new Random();
int[] arr={1,2,3,4,5};
for(int i=0;i<arr.length;i++){
int j = rand.nextInt(arr.length);
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
方法
02 最简单的方法定义和调用
最简单的方法定义和调用
-
方法定义
public static void 方法名(){ 方法体; }
-
方法调用
方法名();
实例
package com.solution;
public class SolutionDemo2 {
public static void main(String[] args) {
girlFriend();
}
public static void girlFriend(){
System.out.println("企鹅");
System.out.println("自立");
System.out.println("18");
}
}
03 带参数的方法定义和调用
带参数的方法定义和调用
-
方法定义
public static void 方法名(参数类型 参数名,...){ 方法体; }
-
方法调用
方法名(参数1,参数2,...)
-
注意事项
- 实参和形参的个数以及数据类型需要一一对应
实参和形参
- 实参:方法调用中的参数
- 形参:方法定义中的参数
04 带返回值方法的定义和调用
带返回值方法的定义和调用
-
定义
public static 返回值类型 方法名(参数){ 方法体; return 返回值;
-
调用
- 直接调用
方法名(实参);
- 赋值调用
数据类型 变量名 = 方法名(实参);
// 比较两长方形的面积大小
package test;
public class Test3 {
public static void main(String[] args) {
compare(1.2,3.2,3,2);
}
public static double getArea(double x,double y){
double area = x*y;
return area;
}
public static void compare(double x1,double y1,double x2,double y2){
double area1=getArea(x1,y1);
double area2=getArea(x2,y2);
if(area1>area2) {
System.out.println("第一个长方形面积更大");
}
else{
System.out.println("第二个长方形面积更大");
}
}
}
05 方法小结
- 方法不调用就不执行
- 方法和方法之间是平级关系,不能互相嵌套定义
- 方法的编写顺序和执行顺序无关
- 方法返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,或者只写return
return关键字
- 没有返回值可以不写,写了代表方法结束
- 有返回值必须写
06 方法的重载
- 重载:在同一个类中,方法名相同,参数不同。与返回值无关
- 参数不同:个数不同、类型不同、顺序不同
07 方法的三个练习
数组最大数
package test;
public class Test6 {
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=1;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
}
return max;
}
}
元素在数组中是否存在
package test;
public class Test7 {
public static void main(String[] args) {
int[ ] arr={1,5,8,12,56,89,34,67};
boolean result=test(arr,35);
System.out.println(result);
}
public static boolean test(int[] arr,int n) {
for(int i=0;i<arr.length;i++){
if(arr[i]==n){
return true;
}
}
return false;
}
}
08 方法练习-拷贝数组
package test;
public class Test8 {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7,8,9};
int[] copy=copyOfRange(arr,3,7);
for(int i=0;i<copy.length;i++){
System.out.print(copy[i]+" ");
}
}
public static int[] copyOfRange(int[] src, int start, int end) {
int[] newArr=new int[end-start];
int index = 0;
for(int i=start;i<end;i++){
newArr[index]=src[i];
index++;
}
return newArr;
}
}
10 什么是基本数据类型和引用数据类型
基本数据类型
- 变量中存储的是真实的数据
- 数据值存储在自己的空间中
- 特点:赋值给其他变量,赋的是真实的值
引用数据类型
-
变量中存储的是地址值,自己空间中存储的是地址值
-
引用:使用其他空间中的数据
-
特点:赋值给其他变量,赋的是地址值
11 方法的值传递
方法传递基本数据类型的内存原理
- 传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值(如int)
- 传递引用类型数据时,传递的是地址值,形参的改变,影响实际参数的值(如int[])
12 综合练习-01~02
买飞机票
package test;
import java.util.Scanner;
public class Test9 {
public static void main(String[] args) {
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();
ticket=test(ticket,month,seat);
System.out.println("折扣后票价为"+ticket);
}
public static int test(int ticket,int month,int seat) {
if (month >= 5 && month <= 10) {
if (seat == 0) {
ticket = (int) (ticket * 0.9);
} 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.65);
} else {
System.out.println("没有这个舱位");
}
}
return ticket;
}
}
找质数
package test;
public class Test10 {
public static void main(String[] args) {
int ans = 0;
for(int i=101;i<=200;i++){
boolean flag=true;
for(int j=2;j<100;j++){
if(i%j==0){
flag=false;
ans++;
break;
}
}
if(flag) {
System.out.println(i+"是质数");
}
}
System.out.println("一共有"+ans+"个质数");
}
}
03~04 开发验证码和数组元素的复制
开发五位验证码
package com.itheima.test.test;
import java.util.Random;
public class Test3 {
public static void main(String[] args) {
char[] chs = new char[52];
for(int i = 0; i < chs.length; i++){
if(i<=25){
chs[i] =(char)(97+i);
}else{
chs[i]=(char)(65+i-26);
}
}
String result="";
Random r = new Random();
for(int i=0;i<4;i++){
int randomIndex = r.nextInt(chs.length);
// System.out.println(chs[randomIndex]);
result=result+chs[randomIndex];
}
int number=r.nextInt(10);
result=result+number;
System.out.println(result);
}
}
数组元素的复制
package com.itheima.test.test;
public class Test4 {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int[] newArr=new int[arr.length];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
for(int i=0;i<arr.length;i++){
System.out.print(newArr[i]+" ");
}
}
}
05 评委打分
package com.itheima.test.test;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
int[] scoreArr=test();
int max=getMax(scoreArr);
int min=getMin(scoreArr);
int sum=getSum(scoreArr);
for(int i=0;i<scoreArr.length;i++){
System.out.println(scoreArr[i]);
}
System.out.println("最大值为"+max);
System.out.println("最小值为"+min);
int avg=(sum-max-min)/(scoreArr.length-2);
System.out.println("最终得分为:"+avg);
}
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;
}
public static int getMin(int[] arr){
int min=arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]<min){
min=arr[i];
}
}
return min;
}
public static int getSum(int[] arr){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
return sum;
}
public static int[] test() {
int[] arr=new int[6];
Scanner sc = new Scanner(System.in);
for(int i=0;i<arr.length;){
System.out.println("请输入评委"+(i+1)+"的打分:");
int score=sc.nextInt();
if(score>=0&&score<=100){
arr[i]=score;
i++;
}else{
System.out.println("成绩超出规定打分范围");
}
}
return arr;
}
}
06 数字加密和解密
//part1
package com.itheima.test.test;
public class Test6 {
public static void main(String[] args) {
int[] arr={1,9,8,3};
for(int i=0;i<arr.length;i++){
arr[i]=arr[i]+5;
}
for(int i=0;i<arr.length;i++){
arr[i]=arr[i]%10;
}
for(int i=0,j=arr.length-1;i<j;i++,j--){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
int number=0;
for(int i=0;i<arr.length;i++){
number=number*10+arr[i];
}
System.out.println(number);
}
}
//part2
package com.itheima.test.test;
public class Test7 {
public static void main(String[] args) {
//反向推导
int number = 12345;
int temp = number;
int count=0;
while(number!=0){
number=number/10;
count++;
}
int[] arr=new int[count];
int index=arr.length-1;
while(temp!=0){
int ge=temp%10;
temp=temp/10; //注意
arr[index]=ge;
System.out.println(index);
index--;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
解密
//part 1
package com.itheima.test.test;
public class Test8 {
public static void main(String[] args) {
int[] arr={8,3,4,6};
for(int i=0,j=arr.length-1;i<j;i++,j--){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for(int i=0;i<arr.length;i++){
if(arr[i]>=0&&arr[i]<=4){
arr[i]=arr[i]+10;
}
}
for(int i=0;i<arr.length;i++){
arr[i]=arr[i]-5;
}
int number=0;
for(int i=0;i<arr.length;i++){
number=number*10+arr[i];
}
System.out.println(number);
}
}
07 抽奖的两种实现
优化前
package com.itheima.test.test;
import java.util.Random;
public class Test9 {
public static void main(String[] args) {
int[] arr={2,588,888,1000,10000};
int[] newArr=new int[arr.length];
Random r=new Random();
for(int i=0;i<5;){
int randomIndex=r.nextInt(arr.length);
int prize = arr[randomIndex];
//判断当前奖项是否存在,如果存在则重新抽取,如果不存在,就表示为有效奖项
boolean flag=contains(newArr,prize);
if(!flag){
//把当前抽取到的奖项添加到newArr中
newArr[i]=prize;
//添加完毕后,移动索引
i++;
}
}
for(int i=0;i<newArr.length;i++){
System.out.print(newArr[i]+" ");
}
}
public static boolean contains(int[] arr,int prize){
for(int i=0;i<arr.length;i++){
if(arr[i]==prize){
return true;
}
}
return false;
}
}
优化后
package com.itheima.test.test;
import java.util.Random;
public class Test10 {
public static void main(String[] args) {
//1.打乱奖池中所有奖项的顺序
int[] arr={2,588,888,1000,10000};
Random r=new Random();
for(int i=0;i<arr.length;i++){
int randomIndex=r.nextInt(arr.length);
int temp=arr[randomIndex];
arr[randomIndex]=arr[i];
arr[i]=temp;
}
//2.遍历奖池
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
08 双色球彩票系统
package com.itheima.test.test;
import java.util.Random;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
int[] arr=createNumber();
System.out.println("===================");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("===================");
int[] userInputArr=userInputNumber();
int redCount=0;
int blueCount=0;
for(int i=0;i<userInputArr.length-1;i++){
int redNumber=userInputArr[i];
for(int j=0;i<arr.length-1;j++){
if(redNumber==arr[j]){
redCount++;
break;
}
}
}
//判断蓝球
int blueNumber=userInputArr[userInputArr.length-1];
if(blueNumber==arr[arr.length-1]){
blueCount++;
}
if(redCount==6&&blueCount==1){
System.out.println("恭喜你,中奖1000万");
}else if(redCount==5&&blueCount==1){
System.out.println("恭喜你,中奖500万");
}else if((redCount==4&&blueCount==1)||(redCount==5&&blueCount==0)){
System.out.println("恭喜你,中奖3000");
}else if((redCount==3&&blueCount==1)||(redCount==4&&blueCount==0)){
System.out.println("恭喜你,中奖10");
}else if((redCount==2&&blueCount==1)||(redCount==3&&blueCount==0)||(redCount==0&&blueCount==1)){
System.out.println("恭喜你,中奖5");
}else{
System.out.println("谢谢参与,谢谢惠顾");
}
}
public static int[] userInputNumber(){
//创建一个数组用于添加用户购买的彩票号码
int[] arr=new int[7];
Scanner sc=new Scanner(System.in);
//让用户输入红球号;
for(int i=0;i<6;){
System.out.println("请输入第"+(i+1)+"个红球号码:");
int redNumber=sc.nextInt();
//redNumber 在1~33 且不重复
if(redNumber>=1&&redNumber<=33){
boolean flag=contains(arr,redNumber);
if(!flag){
arr[i]=redNumber;
i++;
}else{
System.out.println("当前红球号码已存在,请重新输入:");
}
}else{
System.out.println("当前红球号码超出范围");
}
}
while(true) {
System.out.println("请输入蓝球号码:");
int blueNumber = sc.nextInt();
if (blueNumber >= 1 && blueNumber <= 16) {
arr[arr.length - 1] = blueNumber;
break;
} else {
System.out.println("当前蓝球号码超出范围");
}
}
return arr;
}
public static int[] createNumber(){
int[] arr = new int[7];
Random random = new Random();
int index=0;
while(index<6) {
int redNumber=random.nextInt(33)+1;
boolean flag=contains(arr,redNumber);
if(!flag){
arr[index++]=redNumber;
}
}
int blueNumber=random.nextInt(16)+1;
arr[arr.length-1]=blueNumber;
return arr;
}
public static boolean contains(int[] arr, int target){
for (int i = 0; i < arr.length; i++) {
if(arr[i]==target){
return true;
}
}
return false;
}
}
09 二维数组
- 静态初始化:
数据类型[][] 数组名=new int[][]{{元素1,元素2,...},{元素1,元素2,...}};
package com.itheima.test.test;
public class TwoDimensionDemo1 {
public static void main(String[] args) {
int[][] a = new int[][]{{1,2,3},{4,5,6,7,8}};
int[][] b = {{1,2,3},
{4,5,6,7,8}
};
System.out.println(b[0][0]);
System.out.println();
for(int i = 0;i<b.length;i++){
for(int j = 0;j<b[i].length;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
}
package com.itheima.test.test;
public class TwoDimensionDemo2 {
public static void main(String[] args) {
int[][] arr = new int[3][5];
arr[0][0]=10;
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();
}
}
}
- 练习案例
package com.itheima.test.test;
public class Test13 {
public static void main(String[] args) {
int[][] arr={{22,66,44},
{77,33,88},
{25,45,65},
{11,66,99}
};
int yearSum=0;
for(int i=0;i<arr.length;i++){
int[] quarterArr=arr[i];
int sum=getSum(quarterArr);
System.out.println("第"+(i+1)+"个季度的总营业额为:"+sum);
yearSum+=sum;
}
System.out.println("全年总营业额为:"+yearSum+"元");
}
public static int getSum(int[] arr){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
return sum;
}
}
面向对象
02 类和对象
类:是共同特征的描述(设计图)
对象:是真实存在的具体案例
-
定义类:
public class 类名{ 1.成员变量 2.成员方法 3.构造器 4.代码块 5.内部类 }
-
创建对象
类名 对象名 = new 类名();
-
使用对象
- 访问属性:对象名.成员变量
- 访问行为:对象名.方法名(…)
注意事项
- 用来描述一类事物的类,专业称为Javabean类,在Javabean类中,不写main方法
- 在以前,编写main方法的类,叫做测试类,我们可以在测试类中创建javabean类的对象并进行赋值调用
- 类名首字母建议大写
- 一个Java文件中可以定义多个class类,但建议一个文件定义一个类
- 成员变量定义的完整格式为:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值