极客java02

1.代码块和变量的作用域

  • 大括号括起来的就是代码块
  • 有名字的代码块——if-else代码块,for循环代码块,main方法代码块
  • 代码块也叫体:for循环体,main方法体
  • 代码块可以嵌套
变量作用域
  • 代码块里可以使用外层的代码块的变量
  • 代码块外不可以使用内曾的便
  • 可嵌套多层
  • 同一个命名空间不可以重名
99乘法表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MultiTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
String line = "";
for (int j = 1; j < 9; j++) {
if (j > i) {
break;
}
line += i+"*"+j+"="+(i*j)+"\t";
}
System.out.println(line);
}
}
}

2.程序循环之while语句

1
2
3
4
while (条件表达式)
{
while循环体;
}
查找除数增强版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class FindNDiv {
public static void main(String[] args) {
int n = 10;
int dividend = 100;
int divisor = 89;
int count = 0;
while (count < n) {
if (dividend % divisor == 0) {
System.out.println(dividend+"可以整除"+divisor+",商是"+(dividend/divisor));
count++;
}
dividend++;
}
}
}
do-while——至少执行一次
1
2
3
do {
while 循环体
}while (条件表达式);
死循环
  • 无法结束的循环

3.程序执行流程之switch语句

  • 使用if完成,但是略显不够整洁
  • 能够根据两个值相比较,进入代码块最适合的情况
1
2
3
4
5
6
7
8
9
10
switch (用于比较的值) {
case 目标值1:
匹配后执行的语句;
break;
case 目标值2:
匹配后执行的语句;
break;
default :
default语句;
}
  • switch中不同的case中不可以定义相同的变量
  • 别忘记break;如果没有的化会不做判断直接执行后面的语句,default不会执行
  • switch中的比较值必须是int
  • default是可选的

4.循环和判断总结上

java中的注释
  • 以//开始,到这一行结束
  • 可以在行的开始注释,也可以在程序内容后面注释
  • 多行注释/* */
生成指定范围内的随机数
  • Math.random()生成随机数,在0到1之间,类型是double
  • 生成指定范围随机数的思路
1
2
3
4
5
int rangeStart = 30;
int rangeEnd = 90;
int mod = rangeEnd - rangeStart;
int bigRandom = (int)(Math.random() * (rangeEnd * 100));
int numToGuess = (bigRandom % mod) + rangeStart;

5.循环和判断总结下

猜数字游戏
  • 生成一个指定范围内的随机正整数,从命令行读取一个整数,如果和随机数相同算猜中
  • 可以设置随机数范围

6.用数组表示成绩

数组特点
  • 数组是相同类型变量的集合
  • 可以指定数组的大小
  • 有固定的顺序
  • 每个元素都有编号,称为索引(index),从0开始
创建和使用数组的语法
  • 数组元素类型[] 变量名 = new 数组元素类型[长度]
  • 变量名[索引] 可以使用这个变量,也可以给他赋值
1
int[] arr = new int[10];

7.认识变量和数组上

重新认识基本类型的变量
  • 对计算机来说固定的是地址,变化的是值

  • 内存就是一堆白纸,只能通过页码访问,也就是地址

  • 计算机通过地址,读写地址对应内存的值,完成变量的赋值与访问的功能

  • 变量名就是地址,变量的值就是地址的内存的值

数组的名与实
  • 数组是一块地址连续的内存,
  • 数组名,是这块连续内存的第一个内存的地址
  • 数组变量[索引]就是在数组原有地址的基础上,加上索引,获得想要的元素

8.认识变量和数组下

使用数组的长度
  • 数组变量.length可以获得数组的长度
  • 数组创建之后,长度不可以改变
数组索引过界和初始值
  • 访问数组过界的错误:IndexOutOfBoundException
  • 数组中每个元素都有初始值,和类型有关,对于数字类型是0,boolean类型是false
让变量指向新的数组
  • 数组变量可以指向新的数组实体。这时候,数组变量的值就是新的数组实体的值
  • 如果没有别的数组变量指向原来的数组实体,原来的数组实体就不在可访问了

9.多维数组

示例代码

1
2
3
4
5
6
7
8
int[][] array = new int[3][5];
for (int i = 0; i < array.length;i++) {
for (int j = 0; j < array[i].length;j++) {

}
}
array[2] = new int[100];//指向了新的数组

10总结

处理成绩小程序
  • 求某年最好成绩
  • 求某年的平均成绩
  • 求所有年组好成绩
  • 求某门课历年最好成绩
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
import java.util.Scanner;

public class ScoreMaster {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//声明六个变量,代表六个科目
int yuwen = 0;
int shuxue = 1;
int waiyu = 2;
int wuli = 3;
int huaxue = 4;
int shengwu = 5;

int scoresTotal = 6;
String[] scoresNames = new String[6];
scoresNames[yuwen] = "语文";
scoresNames[shuxue] = "数学";
scoresNames[waiyu] = "外语";
scoresNames[wuli] = "物理";
scoresNames[huaxue] = "化学";
scoresNames[shengwu] = "生物";
System.out.println("请问要保存几年的成绩?");
int yearCount = sc.nextInt();

double[][] scores = new double[yearCount][scoresTotal];
for (int i = 0; i < yearCount; i++) {
for (int j = 0; j < scoresTotal; j++) {
scores[i][j] = 80 + Math.random() * 20;
System.out.println("第" + (i + 1) + "年" + scoresNames[j] + "成绩为" + scores[i][j]);
}
}
while (true) {
System.out.println("请输入要进行的操作编号");
System.out.println("1.求某年最好成绩\n" +
"2.求某年的平均成绩\n" +
"3.求所有年份的最好成绩\n" +
"4.求某门课历年最后成绩");
int opr = sc.nextInt();
int year = 0;
switch (opr) {
case 1:
System.out.println("请输入要求哪一年的最好成绩");
year = sc.nextInt() - 1;
if (year < 0 || year >= yearCount) {
System.out.println("年份错误");
}
int bestOfYear = 0;
for (int i = 1; i < scores[year].length; i++) {
if (scores[year][i] > scores[year][bestOfYear]) {
bestOfYear = i;
}
}
System.out.println("第" + (year + 1) + "年最好成绩为" + scoresNames[bestOfYear] + scores[year][bestOfYear]);
break;
case 2:
double avage = 0;
System.out.println("请输入要求哪一年的平均成绩");
year = sc.nextInt() - 1;
for (int i = 0; i < scores[year].length; i++) {
avage += scores[year][i];
}
avage /= scores[year].length;
System.out.println("第"+(year+1)+"年平均成绩为"+avage);
break;
case 3:
int maxId = 0;
year = 0;

for (int i = 0;i < scores.length;i++) {
for (int j = 0;j < scores[i].length;j++) {
if (scores[i][j] > scores[year][maxId]) {
year = i;
maxId = j;
}
}
}
System.out.println("所有年份最好成绩为第"+(year+1)+"年" +scoresNames[maxId]+scores[year][maxId]);
break;

case 4:
System.out.println("请输入要查询哪门课历年最好成绩");
int scoreId = sc.nextInt()-1;
int bestYear = 0;
for (int i = 0;i < scores.length;i++) {
if (scores[i][scoreId] > scores[bestYear][scoreId]) {
bestYear = i;
}
}
System.out.println(scoresNames[scoreId]+"的历年最好成绩为第"+(bestYear+1)+"年"+scores[bestYear][scoreId]);
break;
default:
}
}
}
}

你的支持是我最大的动力!
0%