1—— Java概述
2——常用DOS命令
在接触集成开发环境之前,我们需要使用命令行窗口对java程序进行编译和运行,所以需要知道一些常用DOS命令。
1、打开命令行窗口的方式:win + r打开运行窗口,输入cmd,回车。
2、常用命令及其作用
操作 | 说明 |
---|
盘符名称: | 盘符切换。E:回车,表示切换到E盘。 | dir | 查看当前路径下的内容。 | cd 目录 | 进入单级目录。cd itheima | cd … | 回退到上一级目录。 | cd 目录1\目录2… | 进入多级目录。cd itheima\JavaSE | cd \ | 回退到盘符目录。 | cls | 清屏。 | exit | 退出命令提示符窗口。 |
3—— java基础语法
3.1 注释(理解)
注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。Java中的注释分为三种:
单行注释。单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。
多行注释。多行注释的格式是使用/* 和 */将一段较长的注释括起来。
注意:多行注释不能嵌套使用。
文档注释。文档注释以/** 开始,以*/ 结束。(以后讲)
3.2 关键字(理解)
关键字是指被java语言赋予了特殊含义的单词。
关键字的特点:
? 关键字的字母全部小写。
? 常用的代码编辑器对关键字都有高亮显示,比如现在我们能看到的public、class、static等。
3.3 常量(应用)
常量:在程序运行过程中,其值不可以发生改变的量。
Java中的常量分类:
? 字符串常量 用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、“abc”、"中国"等
? 整数常量 整数,例如:-10、0、88等
? 小数常量 小数,例如:-5.5、1.0、88.88等
? 字符常量 用单引号括起来的一个字符,例如:‘a’、‘5’、‘B’、'中’等
? 布尔常量 布尔值,表示真假,只有两个值true和false
? 空常量 一个特殊的值,空值,值为null
除空常量外,其他常量均可使用输出语句直接输出。
public class Demo {
public static void main(String[] args) {
System.out.println(10);
System.out.println(5.5);
System.out.println('a');
System.out.println(true);
System.out.println("欢迎来到黑马程序员");
}
}
3.4 数据类型(记忆、应用)
3.4.1 计算机存储单元
我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,
通常用大写字母”B”表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,其换算单位如下:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
3.4.2 Java中的数据类型
Java是一个强类型语言,Java中的数据必须明确数据类型。在Java中的数据类型包括基本数据类型和引用数据类型两种。
Java中的基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|
整数类型 | byte | 1 | -128~127 | | short | 2 | -32768~32767 | | int(默认) | 4 | -2的31次方到2的31次方-1 | | long | 8 | -2的63次方到2的63次方-1 | 浮点类型 | float | 4 | 负数:-3.402823E+38到-1.401298E-45 正数: 1.401298E-45到3.402823E+38 | | double(默认) | 8 | 负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324 到1.797693E+308 | 字符类型 | char | 2 | 0-65535 | 布尔类型 | boolean | 1 | true,false |
说明:
? e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。
? 在java中整数默认是int类型,浮点数默认是double类型。
3.5 变量(应用)
3.5.1 变量的定义
变量:在程序运行过程中,其值可以发生改变的量。
从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化。
变量的定义格式:
数据类型 变量名 = 初始化值;
int age = 18;
System.out.println(age);
或者
数据类型 变量名;
变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);
还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。
int a = 10, b = 20;
System.out.println(a);
System.out.println(b);
int c,d;
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);
变量的使用:通过变量名访问即可。
3.5.2 使用变量时的注意事项
- 在同一对花括号中,变量名不能重复。
- 变量在使用之前,必须初始化(赋值)。
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
3.6 标识符(记忆、理解)
标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名。
Java中标识符的组成规则:
? 由字母、数字、下划线“_”、美元符号“$”组成,第一个字符不能是数字。
? 不能使用java中的关键字作为标识符。
? 标识符对大小写敏感(区分大小写)。
Java中标识符的命名约定:
? 小驼峰式命名:变量名、方法名
? 首字母小写,从第二个单词开始每个单词的首字母大写。
? 大驼峰式命名:类名
? 每个单词的首字母都大写。
? 另外,标识符的命名最好可以做到见名知意
? 例如:username、studentNumber等。
3.7 类型转换(理解)
在Java中,一些数据类型之间是可以相互转换的。分为两种情况:自动类型转换和强制类型转换。
自动类型转换:
? 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。例如:
double num = 10;
System.out.println(num);
强制类型转换:
? 把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。
? 强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
? 例如:
double num1 = 5.5;
int num2 = (int) num1;
System.out.println(num2);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nYUExh2p-1636386202044)(%E5%9B%BE%E7%89%871.png)]
说明:
- char类型的数据转换为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a’对应97。
int a = 'a';
System.out.println(a);
- 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
int num = b1 + b2;
byte b3 = (byte) (b1 + b2);
- boolean类型不能与其他基本数据类型相互转换。
2. 运算符
1.1 算术运算符(理解)
1.1.1 运算符和表达式
运算符:对常量或者变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
int a = 10;
int b = 20;
int c = a + b;
+:是运算符,并且是算术运算符。
a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。
1.1.2 算术运算符
符号 | 作用 | 说明 |
---|
+ | 加 | 参看小学一年级 | - | 减 | 参看小学一年级 | * | 乘 | 参看小学二年级,与“×”相同 | / | 除 | 参看小学二年级,与“÷”相同 | % | 取余 | 获取的是两个数据做除法的余数 |
注意:
/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
int a = 10;
int b = 3;
System.out.println(a / b);
System.out.println(a % b);
1.1.3 字符的“+”操作
char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值:
‘a’ – 97 a-z是连续的,所以’b’对应的数值是98,'c’是99,依次递加
‘A’ – 65 A-Z是连续的,所以’B’对应的数值是66,'C’是67,依次递加
‘0’ – 48 0-9是连续的,所以’1’对应的数值是49,'2’是50,依次递加
char ch1 = 'a';
System.out.println(ch1 + 1);
char ch2 = 'A';
System.out.println(ch2 + 1);
char ch3 = '0';
System.out.println(ch3 + 1);
算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。
整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型
等级顺序:byte,short,char --> int --> long --> float --> double
例如:
byte b1 = 10;
byte b2 = 20;
int i3 = b1 + b2;
byte b3 = (byte) (b1 + b2);
-------------------------------
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2;
tips:正是由于上述原因,所以在程序开发中我们很少使用byte或者short类型定义整数。也很少会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。
1.1.4 字符串的“+”操作
当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。
System.out.println("itheima"+ 666);
在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
System.out.println(1 + 99 + "年黑马");
System.out.println(1 + 2 + "itheima" + 3 + 4);
System.out.println(1 + 2 + "itheima" + (3 + 4));
1.2 赋值运算符(应用)
赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。
符号 | 作用 | 说明 |
---|
= | 赋值 | a=10,将10赋值给变量a | += | 加后赋值 | a+=b,将a+b的值给a | -= | 减后赋值 | a-=b,将a-b的值给a | *= | 乘后赋值 | a*=b,将a×b的值给a | /= | 除后赋值 | a/=b,将a÷b的商给a | %= | 取余后赋值 | a%=b,将a÷b的余数给a |
注意:
扩展的赋值运算符隐含了强制类型转换。
short s = 10;
s = s + 10;
s += 10;
1.3 自增自减运算符(理解)
符号 | 作用 | 说明 |
---|
++ | 自增 | 变量的值加1 | – | 自减 | 变量的值减1 |
注意事项:
++和-- 既可以放在变量的后边,也可以放在变量的前边。
单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。
参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。
参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
最常见的用法:单独使用。
int i = 10;
i++;
System.out.println("i:" + i);
int j = 10;
++j;
System.out.println("j:" + j);
int x = 10;
int y = x++;
System.out.println("x:" + x + ", y:" + y);
int m = 10;
int n = ++m;
System.out.println("m:" + m + ", m:" + m);
练习:
int x = 10;
int y = x++ + x++ + x++;
System.out.println(y);
注意:通过此练习深刻理解自增和自减的规律,但实际开发中强烈建议不要写这样的代码!小心挨打!
1.4 关系运算符(应用)
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。
符号 | 说明 |
---|
== | a==b,判断a和b的值是否相等,成立为true,不成立为false | != | a!=b,判断a和b的值是否不相等,成立为true,不成立为false | > | a>b,判断a是否大于b,成立为true,不成立为false | >= | a>=b,判断a是否大于等于b,成立为true,不成立为false | < | a<b,判断a是否小于b,成立为true,不成立为false | <= | a<=b,判断a是否小于等于b,成立为true,不成立为false |
注意事项:
关系运算符的结果都是boolean类型,要么是true,要么是false。
千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
int a = 10;
int b = 20;
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);
1.5 逻辑运算符(应用)
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
符号 | 作用 | 说明 |
---|
& | 逻辑与 | a&b,a和b都是true,结果为true,否则为false | | | 逻辑或 | a|b,a和b都是false,结果为false,否则为true | ^ | 逻辑异或 | a^b,a和b结果不同为true,相同为false | ! | 逻辑非 | !a,结果和a的结果正好相反 |
int i = 10;
int j = 20;
int k = 30;
System.out.println((i > j) & (i > k));
System.out.println((i < j) & (i > k));
System.out.println((i > j) & (i < k));
System.out.println((i < j) & (i < k));
System.out.println("--------");
System.out.println((i > j) | (i > k));
System.out.println((i < j) | (i > k));
System.out.println((i > j) | (i < k));
System.out.println((i < j) | (i < k));
System.out.println("--------");
System.out.println((i > j) ^ (i > k));
System.out.println((i < j) ^ (i > k));
System.out.println((i > j) ^ (i < k));
System.out.println((i < j) ^ (i < k));
System.out.println("--------");
System.out.println((i > j));
System.out.println(!(i > j));
短路逻辑运算符
符号 | 作用 | 说明 |
---|
&& | 短路与 | 作用和&相同,但是有短路效果 | || | 短路或 | 作用和|相同,但是有短路效果 |
在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算。
int x = 3;
int y = 4;
System.out.println((x++ > 4) & (y++ > 5));
System.out.println(x);
System.out.println(y);
System.out.println((x++ > 4) && (y++ > 5));
System.out.println(x);
System.out.println(y);
1.6 三元运算符(理解)
三元运算符语法格式:
关系表达式 ? 表达式1 : 表达式2;
解释:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。
举例:
int a = 10;
int b = 20;
int c = a > b ? a : b;
三元运算符案例:
1、需求:动物园里有两只老虎,已知两只老虎的体重分别为180kg、200kg,请用程序实现判断两只老虎的体重是否相同。
public class OperatorTest01 {
public static void main(String[] args) {
int weight1 = 180;
int weight2 = 200;
boolean b = weight1 == weight2 ? true : false;
System.out.println("b:" + b);
}
}
2、需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。
public class OperatorTest02 {
public static void main(String[] args) {
int height1 = 150;
int height2 = 210;
int height3 = 165;
int tempHeight = height1 > height2 ? height1 : height2;
int maxHeight = tempHeight > height3 ? tempHeight : height3;
System.out.println("maxHeight:" + maxHeight);
}
}
2. 数据输入(应用)
我们可以通过 Scanner 类来获取用户的输入。使用步骤如下:
1、导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。
import java.util.Scanner;
2、创建Scanner对象。
Scanner sc = new Scanner(System.in);
3、接收数据
int i = sc.nextInt();
示例:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println("x:" + x);
}
}
改写三个和尚案例,数据使用键盘录入。
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
3. switch语句
1.1 switch语句结构(掌握)
1.2 switch语句练习-春夏秋冬(应用)
- 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
- 运行结果:
春:3、4、5
夏:6、7、8
秋:9、10、11
冬:1、2、12
public class Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份:");
int month = sc.nextInt();
switch(month) {
case 1:
case 2:
case 12:
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("你输入的月份有误");
}
}
}
- 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。
2. for循环
2.1 for循环结构(掌握)
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
2.2 for循环练习-输出数据(应用)
public class ForTest01 {
public static void main(String[] args) {
for(int i=1; i<=5; i++) {
System.out.println(i);
}
System.out.println("--------");
for(int i=5; i>=1; i--) {
System.out.println(i);
}
}
}
2.3 for循环练习-求和(应用)
- 需求:求1-5之间的数据和,并把求和结果在控制台输出
- 示例代码:
public class ForTest02 {
public static void main(String[] args) {
int sum = 0;
for(int i=1; i<=5; i++) {
sum += i;
}
System.out.println("1-5之间的数据和是:" + sum);
}
}
- 本题要点:
- 今后遇到的需求中,如果带有求和二字,请立即联想到求和变量
- 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的
2.4 for循环练习-求偶数和(应用)
- 需求:求1-100之间的偶数和,并把求和结果在控制台输出 }
- 示例代码:
public class ForTest03 {
public static void main(String[] args) {
int sum = 0;
for(int i=1; i<=100; i++) {
if(i%2 == 0) {
sum += i;
}
}
System.out.println("1-100之间的偶数和是:" + sum);
}
}
2.5 for循环练习-水仙花(应用)
- 需求:在控制台输出所有的“水仙花数”
- 解释:什么是水仙花数?
- 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
- 例如
153 3*3*3 + 5*5*5 + 1*1*1 = 153 - 思路:
- 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
- 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
- 示例代码
public class ForTest04 {
public static void main(String[] args) {
for(int i=100; i<1000; i++) {
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
System.out.println(i);
}
}
}
}
2.6 for循环练习-统计水仙花数个数(应用)
- 需求:统计“水仙花数”一共有多少个,并在控制台输出个数
- 示例代码:
public class ForTest05 {
public static void main(String[] args) {
int count = 0;
for(int i=100; i<1000; i++) {
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
count++;
}
}
System.out.println("水仙花共有:" + count + "个");
}
}
- 本题要点:
- 今后如果需求带有统计xxx,请先想到计数器变量
- 计数器变量定义的位置,必须在循环外部
3. while循环
3.1 while结构(掌握)
public class WhileDemo {
public static void main(String[] args) {
for(int i=1; i<=5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------");
int j = 1;
while(j<=5) {
System.out.println("HelloWorld");
j++;
}
}
}
3.2 while循环练习-珠穆朗玛峰(应用)
- 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
- 示例代码:
public class WhileTest {
public static void main(String[] args) {
int count = 0;
double paper = 0.1;
int zf = 8844430;
while(paper <= zf) {
paper *= 2;
count++;
}
System.out.println("需要折叠:" + count + "次");
}
}
4. 循环细节
4.1 do…while循环结构(掌握)
public class DoWhileDemo {
public static void main(String[] args) {
for(int i=1; i<=5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------");
int j = 1;
do {
System.out.println("HelloWorld");
j++;
}while(j<=5);
}
}
4.2 三种循环的区别(理解)
- 三种循环的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
- for循环和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- 死循环(无限循环)的三种格式
- for(;😉{}
- while(true){}
- do {} while(true);
4.3 跳转控制语句(掌握)
- 跳转控制语句(break)
- 跳转控制语句(continue)
- 注意: continue只能在循环中进行使用!
4.4 循环嵌套(理解)
5. Random
5.1 Random产生随机数(掌握)
-
概述:
- Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能
- API后续课程详细讲解,现在可以简单理解为Java已经写好的代码
-
使用步骤:
-
导入包 import java.util.Random; -
创建对象 Random r = new Random(); -
产生随机数 int num = r.nextInt(10); 解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19 -
示例代码:
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
for(int i=0; i<10; i++) {
int number = r.nextInt(10);
System.out.println("number:" + number);
}
int x = r.nextInt(100) + 1;
System.out.println(x);
}
}
5.3 Random练习-猜数字(应用)
-
需求: 程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少? 当猜错的时候根据不同情况给出相应的提示 A. 如果猜的数字比真实数字大,提示你猜的数据大了 B. 如果猜的数字比真实数字小,提示你猜的数据小了 C. 如果猜的数字与真实数字相等,提示恭喜你猜中了 -
示例代码:
import java.util.Random;
import java.util.Scanner;
public class RandomTest {
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(100) + 1;
while(true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要猜的数字:");
int guessNumber = sc.nextInt();
if(guessNumber > number) {
System.out.println("你猜的数字" + guessNumber + "大了");
} else if(guessNumber < number) {
System.out.println("你猜的数字" + guessNumber + "小了");
} else {
System.out.println("恭喜你猜中了");
break;
}
}
}
}
4——数组
1.1什么是数组【理解】
? 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。
1.2数组定义格式【记忆】
1.2.1第一种
? 数据类型[] 数组名
? 示例:
int[] arr;
double[] arr;
char[] arr;
1.2.2第二种
? 数据类型 数组名[]
? 示例:
int arr[];
double arr[];
char arr[];
1.3数组动态初始化【应用】
1.3.1什么是动态初始化
? 数组动态初始化就是只给定数组的长度,由系统给出默认初始化值
1.3.2动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
1.3.3动态初始化格式详解
-
等号左边:
-
int:数组的数据类型 -
[]:代表这是一个数组 -
arr:代表数组的名称 -
等号右边:
-
new:为数组开辟内存空间 -
int:数组的数据类型 -
[]:代表这是一个数组 -
5:代表数组的长度
1.4数组元素访问【应用】
1.4.1什么是索引
? 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
? 这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
1.4.2访问数组元素格式
数组名[索引];
1.4.3示例代码
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
1.5内存分配【理解】
1.5.1内存概述
? 内存是计算机中的重要原件,临时存储区域,作用是运行程序。
? 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
? 必须放进内存中才能运行,运行完毕后会清空内存。
? Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
1.5.2java中的内存分配
- 目前我们只需要记住两个内存,分别是:栈内存和堆内存
区域名称 | 作用 |
---|
寄存器 | 给CPU使用,和我们开发无关。 | 本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 | 方法区 | 存储可以运行的class文件。 | 堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 | 方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
1.6单个数组的内存图【理解】
1.7多个数组的内存图【理解】
1.8多个数组指向相同内存图【理解】
1.9数组静态初始化【应用】
1.9.1什么是静态初始化
? 在创建数组时,直接将元素确定
1.9.2静态初始化格式
-
完整版格式 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
-
简化版格式 数据类型[] 数组名 = {元素1,元素2,...};
1.9.3示例代码
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
1.10数组操作的两个常见小问题【应用】
1.10.1索引越界异常
-
出现原因 public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]);
}
}
数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。 程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。 -
解决方案 将错误的索引修改为正确的索引范围即可!
1.10.2空指针异常
-
出现原因 public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);
}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。 -
解决方案 给数组一个真正的堆内存空间引用即可!
1.11数组遍历【应用】
-
数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。 public class ArrayTest01 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}
}
以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。 public class ArrayTest01 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
}
1.12数组最值【应用】
-
最大值获取:从数组的所有元素中找出最大值。 -
实现思路:
- 定义变量,保存数组0索引上的元素
- 遍历数组,获取出数组中的每个元素
- 将遍历到的元素和保存数组0索引上值的变量进行比较
- 如果数组元素的值大于了变量的值,变量记录住新的值
- 数组循环遍历结束,变量保存的就是数组中的最大值
-
代码实现: public class ArrayTest02 {
public static void main(String[] args) {
int[] arr = {12, 45, 98, 73, 60};
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
System.out.println("max:" + max);
}
}
5—— 方法概述
1.1 方法的概念(理解)
? 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
- 注意:
- 方法必须先创建才可以使用,该过程成为方法定义
- 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
2. 方法的定义和调用
2.1 无参数方法定义和调用(掌握)
2.2 方法调用过程图解(理解)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iERdZ6IP-1636386202048)(%E6%97%A0%E5%8F%82%E6%95%B0%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%9B%BE%E8%A7%A3.png)]
- 总结:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用完毕之后,会从栈内存中弹栈消失。
2.3 无参数方法的练习(应用)
- 需求:设计一个方法用于打印两个数中的较大数
- 思路:
- ①定义一个方法,用于打印两个数字中的较大数,例如getMax()
- ②方法中定义两个变量,用于保存两个数字
- ③使用分支语句分两种情况对两个数字的大小关系进行处理
- ④在main()方法中调用定义好的方法
- 代码:
public class MethodTest {
public static void main(String[] args) {
getMax();
}
public static void getMax() {
int a = 10;
int b = 20;
if(a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
}
3. 带参数方法定义和调用
3.1 带参数方法定义和调用(掌握)
-
定义格式: 参数:由数据类型和变量名组成 - 数据类型 变量名 参数范例:int a public static void 方法名 (参数1) {
方法体;
}
public static void 方法名 (参数1, 参数2, 参数3...) {
方法体;
}
-
范例: public static void isEvenNumber(int number){
...
}
public static void getMax(int num1, int num2){
...
}
-
调用格式: 方法名(参数);
方法名(参数1,参数2);
-
范例: isEvenNumber(10);
getMax(10,20);
- 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
3.2 形参和实参(理解)
- 形参:方法定义中的参数
? 等同于变量定义格式,例如:int number
- 实参:方法调用中的参数
? 等同于使用变量或常量,例如: 10 number
3.3 带参数方法练习(应用)
- 需求:设计一个方法用于打印两个数中的较大数,数据来自于方法参数 }
- 思路:
- ①定义一个方法,用于打印两个数字中的较大数,例如getMax()
- ②为方法定义两个参数,用于接收两个数字
- ③使用分支语句分两种情况对两个数字的大小关系进行处理
- ④在main()方法中调用定义好的方法(使用常量)
- ⑤在main()方法中调用定义好的方法(使用变量)
- 代码:
public class MethodTest {
public static void main(String[] args) {
getMax(10,20);
int a = 10;
int b = 20;
getMax(a, b);
}
public static void getMax(int a, int b) {
if(a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
}
4. 带返回值方法的定义和调用
4.1 带返回值方法定义和调用(掌握)
-
定义格式 public static 数据类型 方法名 ( 参数 ) {
return 数据 ;
}
-
范例 public static boolean isEvenNumber( int number ) {
return true ;
}
public static int getMax( int a, int b ) {
return 100 ;
}
- 注意:
- 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
-
调用格式 方法名 ( 参数 ) ;
数据类型 变量名 = 方法名 ( 参数 ) ;
-
范例 isEvenNumber ( 5 ) ;
boolean flag = isEvenNumber ( 5 );
- 注意:
- 方法的返回值通常会使用变量接收,否则该返回值将无意义
4.2 带返回值方法练习(应用)
-
需求:设计一个方法可以获取两个数的较大值,数据来自于参数 -
思路:
- ①定义一个方法,用于获取两个数字中的较大数
- ②使用分支语句分两种情况对两个数字的大小关系进行处理
- ③根据题设分别设置两种情况下对应的返回结果
- ④在main()方法中调用定义好的方法并使用变量保存
- ⑤在main()方法中调用定义好的方法并直接打印结果
-
代码: public class MethodTest {
public static void main(String[] args) {
int result = getMax(10,20);
System.out.println(result);
System.out.println(getMax(10,20));
}
public static int getMax(int a, int b) {
if(a > b) {
return a;
} else {
return b;
}
}
}
5. 方法的注意事项
5.1 方法的注意事项(掌握)
5.2 方法的通用格式(掌握)
6. 方法重载
6.1 方法重载(理解)
-
方法重载概念 方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
-
注意:
- 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
- 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
-
正确范例: public class MethodDemo {
public static void fn(int a) {
}
public static int fn(double a) {
}
}
public class MethodDemo {
public static float fn(int a) {
}
public static int fn(int a , int b) {
}
}
-
错误范例: public class MethodDemo {
public static void fn(int a) {
}
public static int fn(int a) {
}
}
public class MethodDemo01 {
public static void fn(int a) {
}
}
public class MethodDemo02 {
public static int fn(double a) {
}
}
6.2 方法重载练习(掌握)
-
需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long) -
思路:
- ①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数
- ②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数
- ③定义所有的重载方法,两个byte类型与两个short类型参数
- ④完成方法的调用,测试运行结果
-
代码: public class MethodTest {
public static void main(String[] args) {
System.out.println(compare(10, 20));
System.out.println(compare((byte) 10, (byte) 20));
System.out.println(compare((short) 10, (short) 20));
System.out.println(compare(10L, 20L));
}
public static boolean compare(int a, int b) {
System.out.println("int");
return a == b;
}
public static boolean compare(byte a, byte b) {
System.out.println("byte");
return a == b;
}
public static boolean compare(short a, short b) {
System.out.println("short");
return a == b;
}
public static boolean compare(long a, long b) {
System.out.println("long");
return a == b;
}
}
7. 方法的参数传递
7.1 方法参数传递基本类型(理解)
7.2 方法参数传递引用类型(理解)
-
测试代码: public class ArgsDemo02 {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
System.out.println("调用change方法前:" + arr[1]);
change(arr);
System.out.println("调用change方法后:" + arr[1]);
}
public static void change(int[] arr) {
arr[1] = 200;
}
}
-
结论:
- 对于引用类型的参数,形式参数的改变,影响实际参数的值
-
结论依据:
-
引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hVaJ7ma-1636386202054)(%E6%96%B9%E6%B3%95%E4%BC%A0%E5%8F%82-%E5%BC%95%E7%94%A8%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.png)]
7.3 数组遍历(应用)
-
需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55] -
思路:
-
①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句System.out.print(“内容”); System.out.println(“内容”); 输出内容并换行 System.out.print(“内容”); 输出内容不换行 System.out.println(); 起到换行的作用 -
②定义一个数组,用静态初始化完成数组元素初始化 -
③定义一个方法,用数组遍历通用格式对数组进行遍历 -
④用新的输出语句修改遍历操作 -
⑤调用遍历方法 -
代码: public class MethodTest01 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
printArray(arr);
}
public static void printArray(int[] arr) {
System.out.print("[");
for(int x=0; x<arr.length; x++) {
if(x == arr.length-1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x]+", ");
}
}
System.out.println("]");
}
}
7.4 数组最大值(应用)
-
需求:设计一个方法用于获取数组中元素的最大值 -
思路:
- ①定义一个数组,用静态初始化完成数组元素初始化
- ②定义一个方法,用来获取数组中的最大值,最值的认知和讲解我们在数组中已经讲解过了
- ③调用获取最大值方法,用变量接收返回结果
- ④把结果输出在控制台
-
代码: public class MethodTest02 {
public static void main(String[] args) {
int[] arr = {12, 45, 98, 73, 60};
int number = getMax(arr);
System.out.println("number:" + number);
}
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
}
6——Debug模式
1.1什么是Debug模式【理解】
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
1.2Debug模式操作流程【应用】
-
如何加断点
- 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VErlW5y-1636386202056)(01.png)] -
如何运行加了断点的程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nznr9a8H-1636386202059)(02.png)] -
看哪里
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6ua1HeK-1636386202061)(03.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNjLTQuL-1636386202064)(04.png)] -
点哪里
- 点Step Into (F7)这个箭头,也可以直接按F7
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8LDOkPVR-1636386202065)(05.png)] -
如何删除断点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKHFZthm-1636386202068)(06.png)]
- 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qA559iig-1636386202069)(07.png)]
2.基础练习
2.1减肥计划if版本【应用】
2.1.1案例需求
? 输入星期数,显示今天的减肥活动 ? 周一:跑步 ? 周二:游泳 ? 周三:慢走 ? 周四:动感单车 ? 周五:拳击 ? 周六:爬山 ? 周日:好好吃一顿
2.1.2代码实现
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数:");
int week = sc.nextInt();
if (week < 1 || week > 7) {
System.out.println("你输入的星期数有误");
} else if (week == 1) {
System.out.println("跑步");
} else if (week == 2) {
System.out.println("游泳");
} else if (week == 3) {
System.out.println("慢走");
} else if (week == 4) {
System.out.println("动感单车");
} else if (week == 5) {
System.out.println("拳击");
} else if (week == 6) {
System.out.println("爬山");
} else {
System.out.println("好好吃一顿");
}
}
}
2.2减肥计划switch版本【应用】
2.2.1案例需求
? 输入星期数,显示今天的减肥活动 ? 周一:跑步 ? 周二:游泳 ? 周三:慢走 ? 周四:动感单车 ? 周五:拳击 ? 周六:爬山 ? 周日:好好吃一顿
2.2.2代码实现
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数:");
int week = sc.nextInt();
switch (week) {
case 1:
System.out.println("跑步");
break;
case 2:
System.out.println("游泳");
break;
case 3:
System.out.println("慢走");
break;
case 4:
System.out.println("动感单车");
break;
case 5:
System.out.println("拳击");
break;
case 6:
System.out.println("爬山");
break;
case 7:
System.out.println("好好吃一顿");
break;
default:
System.out.println("你输入的星期数有误");
}
}
}
2.3逢七跳过【应用】
2.3.1案例需求
? 朋友聚会的时候可能会玩一个游戏:逢七过。 ? 规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过。 ? 为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。 ? 这样,大家将来在玩游戏的时候,就知道哪些数据要说:过。
2.3.2代码实现
public class Test03 {
public static void main(String[] args) {
for(int x=1; x<=100; x++) {
if(x%10==7 || x/10%10==7 || x%7==0) {
System.out.println(x);
}
}
}
}
2.4不死神兔【应用】
2.4.1案例需求
? 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, ? 假如兔子都不死,问第二十个月的兔子对数为多少?
2.4.2代码实现
public class Test04 {
public static void main(String[] args) {
int[] arr = new int[20];
arr[0] = 1;
arr[1] = 1;
for(int x=2; x<arr.length; x++) {
arr[x] = arr[x-2] + arr[x-1];
}
System.out.println("第二十个月兔子的对数是:" + arr[19]);
}
}
2.5百钱白鸡【应用】
2.5.1案例需求
? 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 ? 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
2.5.2代码实现
public class Test05 {
public static void main(String[] args) {
for(int x=0; x<=20; x++) {
for(int y=0; y<=33; y++) {
int z = 100 - x - y;
if(z%3==0 && 5*x+3*y+z/3==100) {
System.out.println(x+","+y+","+z);
}
}
}
}
}
2.6数组元素求和【应用】
2.6.1案例需求
? 有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和, ? 要求是:求和的元素个位和十位都不能是7,并且只能是偶数
2.6.2代码实现
public class Test06 {
public static void main(String[] args) {
int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};
int sum = 0;
for(int x=0; x<arr.length; x++) {
if(arr[x]%10!=7 && arr[x]/10%10!=7 && arr[x]%2==0) {
sum += arr[x];
}
}
System.out.println("sum:" + sum);
}
}
2.7判断两个数组是否相同【应用】
2.7.1案例需求
? 定义一个方法,用于比较两个数组的内容是否相同
2.7.2代码实现
public class Test07 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
int[] arr2 = {11, 22, 33, 44, 5};
boolean flag = compare(arr,arr2);
System.out.println(flag);
}
public static boolean compare(int[] arr, int[] arr2) {
if(arr.length != arr2.length) {
return false;
}
for(int x=0; x<arr.length; x++) {
if(arr[x] != arr2[x]) {
return false;
}
}
return true;
}
}
2.8查找元素在数组中出现的索引位置【应用】
2.8.1案例需求
? 已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引。
? 并在控制台输出找到的索引值。如果没有查找到,则输出-1
2.8.2代码实现
public class Test08 {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的数据:");
int number = sc.nextInt();
int index = getIndex(arr, number);
System.out.println("index: " + index);
}
public static int getIndex(int[] arr, int number) {
int index = -1;
for(int x=0; x<arr.length; x++) {
if(arr[x] == number) {
index = x;
break;
}
}
return index;
}
}
2.9数组元素反转【应用】
2.9.1案例需求
? 已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值交换, ? 交换后的数组 arr = {50, 46, 37, 28, 19}; 并在控制台输出交换后的数组元素。
2.9.2代码实现
public class Test09 {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
reverse(arr);
printArray(arr);
}
public static void reverse(int[] arr) {
for (int start = 0, end = arr.length - 1; start <= end; start++, end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
2.10评委打分【应用】
2.10.1案例需求
? 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 ? 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。
2.10.2代码实现
public class Test10 {
public static void main(String[] args) {
int[] arr = new int[6];
Scanner sc = new Scanner(System.in);
for(int x=0; x<arr.length; x++) {
System.out.println("请输入第" + (x + 1) + "个评委的打分:");
arr[x] = sc.nextInt();
}
int max = getMax(arr);
int min = getMin(arr);
int sum = getSum(arr);
int avg = (sum - max - min) / (arr.length - 2);
System.out.println("选手的最终得分是:" + avg);
}
public static int getSum(int[] arr) {
int sum = 0;
for(int x=0; x<arr.length; x++) {
sum += arr[x];
}
return sum;
}
public static int getMin(int[] arr) {
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
return min;
}
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
m.out.print(arr[x]); } else { System.out.print(arr[x] + ", "); } }
System.out.println("]");
}
}
### 2.10评委打分【应用】
#### 2.10.1案例需求
? 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
? 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。
#### 2.10.2代码实现
```java
/*
思路:
1:定义一个数组,用动态初始化完成数组元素的初始化,长度为6
2:键盘录入评委分数
3:由于是6个评委打分,所以,接收评委分数的操作,用循环改进
4:定义方法实现获取数组中的最高分(数组最大值),调用方法
5:定义方法实现获取数组中的最低分(数组最小值) ,调用方法
6:定义方法实现获取数组中的所有元素的和(数组元素求和) ,调用方法
7:按照计算规则进行计算得到平均分
8:输出平均分
*/
public class Test10 {
public static void main(String[] args) {
//定义一个数组,用动态初始化完成数组元素的初始化,长度为6
int[] arr = new int[6];
//键盘录入评委分数
Scanner sc = new Scanner(System.in);
//由于是6个评委打分,所以,接收评委分数的操作,用循环改进
for(int x=0; x<arr.length; x++) {
System.out.println("请输入第" + (x + 1) + "个评委的打分:");
arr[x] = sc.nextInt();
}
//printArray(arr);
//定义方法实现获取数组中的最高分(数组最大值),调用方法
int max = getMax(arr);
//定义方法实现获取数组中的最低分(数组最小值) ,调用方法
int min = getMin(arr);
//定义方法实现获取数组中的所有元素的和(数组元素求和) ,调用方法
int sum = getSum(arr);
//按照计算规则进行计算得到平均分
int avg = (sum - max - min) / (arr.length - 2);
//输出平均分
System.out.println("选手的最终得分是:" + avg);
}
/*
两个明确:
返回值类型:int
参数:int[] arr
*/
public static int getSum(int[] arr) {
int sum = 0;
for(int x=0; x<arr.length; x++) {
sum += arr[x];
}
return sum;
}
/*
两个明确:
返回值类型:int
参数:int[] arr
*/
public static int getMin(int[] arr) {
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
return min;
}
/*
两个明确:
返回值类型:int
参数:int[] arr
*/
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
//遍历数组
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
|