控制结构
一、基本程序结构
控制结构的作用是控制程序中语句的执行顺序,它是结构化程序设计的关键。 Java语言有三种基本的流程控制结构:顺序结构、分支结构、循环结构。
二、 if语句
if(条件表达式){ 语句块1 }else if(条件表达式2){ 语句块2 }else{ 语句块3 }
//例题2_12采用三种if形式,判断某一年是不是闰年
public class Example2_12 {
public static void main(String args[]) {
// 第一种形式
int year = 2000;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
System.out.println(year + " is a leap year.");
} else {
System.out.println(year + " is not a leap year.");
}
// 第二种形式 闰年-能被4和400整除,不能被100整除,一真即真。
year = 2011;
boolean leap;
if (year % 4 != 0) {
leap = false;
} else if (year % 100 != 0) {
leap = true;
} else if (year % 400 != 0) {
leap = false;
} else {
leap = true;
}
if (leap == true) {
System.out.println(year + " is a leap year.");
} else {
System.out.println(year + " is not a leap year.");
}
// 第三种形式
year = 2012;
if (year % 4 == 0) {
if (year % 100 != 0) {
leap = true;
} else if (year % 400 == 0) {
leap = true;
}
} else {
leap = false;
}
if (leap == true) {
System.out.println(year + " is a leap year.");
} else {
System.out.println(year + " is not a leap year.");
}
}
}
三、switch语句
switch(表达式){ case '常量1': 语句块1 break case '常量2': 语句块2 break ...... default: 结尾语句块 }
//例题2_13switch语句的使用示例(注意其中break语句的作用)
//判断输入的值是否为闰年,确定二月天数。
public class Example2_13 {
public static void main(String[] args) {
int year;
int month;
int days = 0;
System.out.print("请输入年份和月份:");
Scanner in = new Scanner(System.in); // 从键盘输入年份和月份数据 调用Scanner函数对象
year = in.nextInt();
month = in.nextInt();
switch (month) {
case 2: // 判断是否闰年,确定2月份天数
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
days = 29; //是闰年
else
days = 28; //不是闰年
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
default:
System.out.println("月份数据非法!");
}
System.out.println(year + "年" + month + "月有" + days + "天");
}
}
四、for循环语句
for(表达式1;表达式2;表达式3){ 循环体 }
//例题2_14计算1到10的平方,并输出这10个数得平方和。使用for循环
public class Example2_14 {
public static void main(String[] args) {
int sum = 0;
int temp;
for (int i = 1; i <= 10; i++) {
temp = i * i;
System.out.print(temp + " "); //使用+ " "让每个值之间有一个空格距离
sum += temp;
}
System.out.println(); //输出空内容,起到换行作用。
System.out.println(sum);
}
}
五、 while循环语句
语句格式: while(条件表达式){ 循环体 }
//例题2_15计算1到10的平方,并输出这10个数得平方和。使用while循环
public class Example2_15 {
public static void main(String[] args) {
int sum = 0, i = 1, temp;
while (i <= 10) {
temp = i * i;
System.out.print(temp + " ");
sum += temp;
i++; // 改变循环控制变量值
}
System.out.println();
System.out.println(sum);
}
}
六、do-while循环语句
语句格式: do{ 循环体; }while(条件表达式);
//例题2_16计算1到10的平方,并输出这10个数得平方和。使用do while循环
public class Example2_16 {
public static void main(String[] args) {
int sum = 0, i = 1, temp;
do {
temp = i * i;
System.out.print(temp + " ");
sum += temp;
i++;
} while (i <= 10);
System.out.println();
System.out.println(sum);
}
}
七、跳转语句
break continue
//例题2_17在循环中使用break语句
public class Example2_17 {
public static void main(String[] args) {
int x = 1;
while (x < 10) {
System.out.println(" 进入循环,x的初始值为:" + x);
switch (x) {
case 0:
System.out.println(" 进入switch语句,x=" + x);
break;
case 1:
System.out.println(" 进入switch语句,x=" + x);
break;
case 2:
System.out.println(" 进入switch语句,x=" + x);
break;
}
if (x == 5) {
break; //使用break终止循环的执行
}
x++;
System.out.println(" 跳出switch语句,但还在循环中.");
}
}
}
//例题2_18break语句和continue语句的使用示例
public class Example2_18 {
public static void main(String[] args) {
String output = "";
int count;
for (count = 1; count <= 10; count++) {
if (count == 4) {
continue;
}
if (count == 9) {
break;
}
//count是int类型,output是string类型。 int类使用+“ “转换成string类型 用” “拼接
output += count++ + " ";
}
output += "\nBreak out of loop count at count =" + count; //循环内拼接完,一次输出。
System.out.println(output);
}
}
八、for增强型语句
遍历数组 for(初始变量 : 数组名){}
//例题2_19使用foreach语句对数组进行遍历。
public class Example2_19 {
public static void main(String []args)
{
int arr[]={1,2,3,4,5}; //定义一个一维数组
System.out.println("一维数组中的元素分别为:");
//for增强型语句,称为foreach,任何foreach可改为for
for(int a :arr)
{
System.out.println(a+"\n"); //每一个输出语句中末尾都有一个\n
}
}
}
九、一维数组的创建和使用
1. 一维数组的创建和声明
数组是由一组类型相同的元素组成的有一定存储顺序的数据集合。
使用数组两个步骤:定义声明、创建数组,为数组分配内存单元。
- 方法一
数组定义格式: 数组元素类型 数组名[]; 数组元素类型 [] 数组名;
数组创建对象,分内存单元: 数组名=new 数组元素类型[数组元素个数];
- 方法二
数组定义格式+数组创建对象,分内存单元: 数组元素类型 数组名[]=new 数组元素类型[数组元素个数]; 数组元素类型 [] 数组名=new 数组元素类型[数组元素个数];
- 方法三
数组元素类型 数组名[]={值1,值2.值3,……};
2. 一维数组的初始化
数组的初始化分为静态初始化和动态初始化。
静态初始化:
int a[]={1,2,3,4,5};
动态初始化:
int a[]=new int[5];
for(int i=0;i<5;i++){
a[i]=i;
}
- 基本数据类型的数组
数组中存放的是基本类型数据,则为数组元素分配内存空间后,直接赋初始值。
int a[]=new int[5];
for(int i=0;i<5;i++){
a[i]=i;
}
- 复合数据类型的数组
数组中存放的是复合或引用类型数据,则为数组元素分配内存空间后,还需为每个数组元素单独分配内存空间。
String s[];
s=new String[3]; //为数组元素分配内存空间
s[0]=new String("How"); //为数组第一个元素分配内存空间
s[1]=new String("are");
s[2]=new String("you");
3. 数组元素的访问使用
语法格式:数组名[下标] 备注:下标必须是整数或转变成整型的量,下标从0开始。 Java数组即是一个对象,数组有一个重要属性——长度length。语法格式:数组名.length
//例题2_20声明一个整型数组并对它初始化,输出各元素的值和其总和。
public class Example2_20 {
public static void main(String args[]) {
//静态初始化
int a[] = { 1, 2, 3 }; // 定义、创建、初始化数组
int i, sum = 0;
for (i = 0; i < a.length; i++)
sum = sum + a[i]; // 获取数组元素并进行累加
for (i = 0; i < a.length; i++)
System.out.println(" a["+ i +"]=" + a[i]); // 获取数组元素并输出其值 " + i + "在字符串中嵌套输出变量
System.out.println(" sum=" + sum);
//动态初始化
int b[]; //定义一个数组变量
b=new int[6]; //创建数组对象,分配内存单元。
for (int j = 0; j < 6; j++) {
b[j]=j;
System.out.println(b[j]);
}
}
}
//例题2_21使用冒泡排序法,对已经数据从小到大排序。
public class Example2_21 {
public static void main(String args[]) {
int i, j;
int intArray[] = { 4, 1, 5, 8, 9 };
int len = intArray.length;
/* //循环实现冒泡排序-两两对换 每次找出最大值。
for(i=0;i<intArray.length-1;i++) {
for(j=0;j<intArray.length-i-1;j++) {
if(intArray[j]>intArray[j+1]) { //改变>或<符号,改变排序
int temp=intArray[j];
intArray[j]=intArray[j+1];
intArray[j+1]=temp;
}
}
}*/
for (i = 0; i < len - 1; i++)
for (j = len - 1; j > i; j--) //这里是数组最后一个数开始两两比较。
if (intArray[j - 1] > intArray[j]) {
int t = intArray[j - 1];
intArray[j - 1] = intArray[j];
intArray[j] = t;
}
//增强型for循环,遍历数组。
for(int k:intArray){
System.out.println(k + " ");
}
}
}
//对数组元素进行查询,如果能找到,输出该元素的位置
public class Example2_22 {
public static void main(String[] args) {
int b = 46;
int index = 0;
int a[] = { 23, 56, 78, 12, 34, 90, 46, 22, 14, 79 };
for (int i = 0; i < 10; i++) {
System.out.print("\t" + a[i]);
if (b == a[i])
index = i;
}
System.out.print("\n");
System.out.print("找到了该数,位置在第:" + (index + 1 + "号!")); //因为下标从0开始。
}
}
十、多维数组的创建和使用
多维数组看做数组的数组,常用于二维表。
语法格式: 数组元素类型 数组名[][]; 数组元素类型[][] 数组名;
使用new运算符有两种方式:
- 用一条语句为整个二维数组分配空间。
int a[][]=new int[2][3];
- 先指定二维数组的行数,再分别为每一行指定列数。
int b[][]=new int[2][];
b[0]=new int[3];
b[1]=new int[3];
不要求每一行的元素个数相等,可以形成不规则的数组,空处不会默认补0。
int b[][]=new int[2][];
b[0]=new int[3];
b[1]=new int[10];
可以不用new运算符,可以用初始化,定义数组并创建对象。
int a[][]={{1,2,3},{4,5,6}}; //规则二维数组
int a[][]={{1,2,3},{4,5,6,7}}; //不规则二维数组
访问格式: 数组名[行下标][列下标] 备注:行小标、列下标都是从0开始。
数组名.length 表示数组的行数 数组名[行下标].length 表示该行中的元素的个数。
//例题2_23定义一个不规则的二维数组,输出其行数的元素个数,并求数组所有元素的和
public class Example2_23 {
public static void main(String args[]) {
int b[][] = { { 11 }, { 21, 22 }, { 31, 32, 33, 34 } };
//System.out.println(b[0][1]); //空出部分不会自动补0
int sum = 0;
System.out.println("数组b的行数:" + b.length);
for (int i = 0; i < b.length; i++) {
System.out.println("b[" + i + "]行的数据个数:" + b[i].length);
for (int j = 0; j < b[i].length; j++) {
sum = sum + b[i][j];
}
}
System.out.println("数组元素的总和:" + sum);
}
}
//例题2_24定义一个一维数组存储10个学生名字,定义一个二维数组存放这10个学生的6门课的成绩
public class Example2_24 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//复合类型的数组
String[] name = { "lili", "tom", "jack", "susan", "wendy", "tommy", "neil", "paul", "richie", "roger" };// 存储学生的名字
int[][] grade = { { 50, 60, 70, 80, 90, 10 },
{ 40, 90, 80, 60, 40, 70 }, { 60, 80, 70, 60, 40, 90 },
{ 50, 60, 70, 80, 90, 10 }, { 60, 80, 70, 60, 40, 90 },
{ 60, 70, 80, 90, 70, 70 }, { 60, 80, 70, 60, 40, 90 },
{ 60, 80, 70, 60, 40, 90 }, { 70, 80, 90, 70, 70, 70 },
{ 60, 80, 70, 60, 40, 90 } };// 存储学生各科成绩
System.out.println("输入要查询成绩的学生名字:");
String chioce = input.nextLine(); //输入字符串
for (int i = 0; i < 10; i++) {
//配对输入值是谁
if (name[i].equals(chioce)) {
System.out.println("学生:" + name[i] + " 的成绩如下:");
System.out.println("C程序设计:" + grade[i][0] + "物理:"
+ grade[i][1] + "英语:" + grade[i][2] + "高数:"
+ grade[i][3] + "体育:" + grade[i][4] + "政治:"
+ grade[i][5] + "\n");
break;
}
}
System.out.println("******************************************************");
System.out.println("输入要查询不及格人数的科目序号\n");
System.out.println("1,C程序设计 2,物理 3,英语 4,高数 5,体育 6,政治 ");
int ch = input.nextInt(); //输入int类型。
int time = 0;
System.out.println("不及格的名单为:");
for (int i = 0; i < 10; i++) {
if (grade[i][ch - 1] < 60) {
time++;
switch (i) {
case 0: System.out.println(name[i]);
break;
case 1: System.out.println(name[i]);
break;
case 2: System.out.println(name[i]);
break;
case 3: System.out.println(name[i]);
break;
case 4: System.out.println(name[i]);
break;
case 5: System.out.println(name[i]);
break;
case 6: System.out.println(name[i]);
break;
case 7: System.out.println(name[i]);
break;
case 8: System.out.println(name[i]);
break;
case 9: System.out.println(name[i]);
break;
}
}
}
System.out.println("该科目不及格人数为:" + time);
}
}