Java中的结构和数组
选择结构
一、什么是选择结构
选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。
二、选择结构的分类
选择结构分为两类:if选择结构和switch选择结构
三、if选择结构
if选择结构又分为:简单if结构、if…else结构、多重if结构、if嵌套结构;
在if结构里只有if是不可以少的,else不可以单独出现,否则会报错,else和它上面最近的if为一对,注意:要看大括号的位置。
if里面的条件可以是boolean类型的值,也可以是等值判断。
1、简单if结构
简单if结构:可以处理单一或组合条件的情况;
语法:
if(条件){
//代码块
}
流程图:
实例:
public class Y1{
public static void main(Strint[] args){
int score = 85;
if( score > 80){ // 如果score大于80就输出 是个人才;如果score不大于80就什么都不输出
System.out.println("是个人才");
}
}
}
//结果是: 是个人才
if的条件必须是boolean类型的值
2、if…else结构
if…else结构:可以处理简单的条件分支情况。
语法:当条件成立时执行代码块1,当条件不成立时执行代码块2;条件必须是boolean类型值
if(条件){
//代码块1
}else{
//代码块2
}
流程图:
实例:
public class Y2{
public static void main(String[] args){
int score = 82, score2 = 90; //两门功课的成绩
if(score > 80 && score2 >85){
System.out.println("好好学习"); //如果score大于80并且score2大于85就输出 好好学习
}else{
System.out.println("天天向上"); //如果score小于80 或 score小于85 就输出 天天向上
}
}
}
//结果是:好好学习
3、多重if结构
多重if结构:可以处理连续区间的条件分支情况。
语法:先判断条件1是否成立,成立执行代码块1,不成立执行else语句并判断条件2是否成立,成立执行代码块2,不成立则不输出
if(条件1){
//代码块1
}else if(条件2){
//代码块2
}
流程图
实例
public class Y3{
public static void main(String[] agrs){
if(8 > 9){ //判断8是否大于9,大于输出 好好学习,小于就执行else语句
System.out.println("好好学习");
}else if(9 < 10){ // 再判断9是否大于10,大于输出 天天向上,小于就什么都不输出
System.out.println("天天向上");
}
}
}
//结果是 : 天天向上
4、if嵌套
if嵌套:可以处理复杂的条件分支情况。
语法:先判断条件1是否成立,成立:判断条件2是否成立,成立执行代码块1;不成立执行代码2;条件1不成立,执行代码块3。
if(条件1){
if(条件2){
//代码块1
}else{
//代码块2
}
}else{
//代码块3
}
流程图:
实例
public class Y4{
public static void main(String[] args){
if(8 > 9){ //判断8是否大于9,大于进入下一个if,小于直接输出 学习爱我
if(9 < 10){ //判断9是否小于10 小于输出 学习使我快乐,大于输出 我爱学习
System.out.println("学习使我快乐");
}else{
System.out.println("我爱学习");
}
}else{
System.out.println("学习爱我");
}
}
}
//结果是:学习爱我
四、switch选择结构
switch结构:当需要多重分支并且条件判断是等值判断的情况下,使用switch选择结构代替多重if选择结构会更简单,代码结构会更清晰易读。在使用switch结构的时候,可以根据情况需求在case语句后面写上break语句,switch仅用于等值判断。
switch语法:判断表达式的值是否与case中的常量相同,相同执行相应的代码块,没有相同的就执行default中的代码块。
语法:
switch(表达式){
case 常量 1:
//代码块1;
break;
case 常量 2:
//代码块2;
break;
default :
//代码块n;
break;
}
实例:
public class Y1{
public static void main(String[] args){
int num = 1;
switch(num){ //判断num的值与case的常量是否相同,相同输出case中的代码,不相同就输出default中的代码
case 1:
System.out.println("我爱学习");
break;
case 2:
System.out.println("学习爱我");
break;
default :
System.out.println("学习使我快乐");
break;
}
}
}
//结果输出 : 我爱学习
在switch结构里,只有switch是不可以少的,case 块、default块和break语句是可以少的,但是少了case块,这个程序就没有任何意义了;在case块里,case后面必须要跟常量和英文状态下的冒号,否则会报错;在default块里,default后面必须要跟英文状态下的冒号,否则会报错。
在switch中,case块和default块的位置是不固定的,但是位置的不同,程序的运行结果也不同。
五、处理系统异常
处理系统异常其实就是防报错,防报错有一个方法,但这个方法要结合Scanner一起使用
Scanner in = new Scanner(System.in);
if(in.hasNextInt() == true){ //判断从控制台输入的值是否是int类型的
int num = in.nextInt();
whlie(num != 0){
System.out.println(num);
}
}else{
System.out.println("请输入正确的数字");
}
用这个方法可以防止报错,如果输入的类型和定义的类型不一致会进入else语句提示 请输入正确的数字。
循环结构
一、循环结构是什么
循环结构是反复进行相同的或类似的一系列操作;循环不是无休止的进行的,满足一定条件的时候才会继续,条件不满足的时候,循环退出。
二、循环结构的分类
目前常用的循环结构分为三种:while、do…while 、 for;
while循环又称“当型循环”;do…while循环又称为“直道循环”;for循环就叫for循环。
无论是在while循环、do…while循环还是for循环中都要有迭代,如果没有迭代,可能就是个死循环了。
三、while循环
while循环:while循环的特点是:先判断,再执行;如果第一次的判断循环条件是就不成立,则会直接跳出循环,循环操作一次也不执行。while小括号里的循环条件必须是boolean类型
while语法:先判断循环条件是否成立,成立执行循环操作,不成立就不进入循环。
while(循环条件){
//循环操作
}
流程图:
实例:
int i = 1;
while(i <= 100){
System.out.println("好好学习");
i++; //迭代
}
//循环输出100次 好好学习
四、do…while循环
do…while循环:do…while循环的特点是:先执行,再判断;会无条件的循环一次。do…while循环结构要以分号结尾,否则会报错
do…while循环语法:先无条件的执行一次,再判断循环条件是否成立,成立就再次进入循环,不成立就不再进入循环。
do{
//循环操作
}while(循环条件);
流程图
实例:
int i = 1;
do{
System.out.println("好好学习");
i++; //迭代
}while(i <= 100);
//输出100遍 好好学习
五、for循环
for循环:for循环一般用于次数固定的,
for循环语法:
for(表达式1;表达式2;表达式3){
//循环操作
}
流程图
实例
for(int i = 1; i <= 100; i++){
System.out.println("好好学习");
}
//输出100次 好好学习
在for循环语句中,三个表达式都可以没有,但是两个分号不能少,否则会语法报错;
表达式1:赋值语句,只执行一次,给变量赋初始值
表达式2:条件语句,必须是boolean类型的
表达式3:迭代,通常使用 ++ 或 – 运算符,用来改变变量的值。
for循环的执行顺序是:
1、执行初始部分;
2、进行循环条件的判断;
3、根据判断结果决定是否循环,true:执行循环操作;false:退出循环,不再执行步骤4和步骤5;
4、执行迭代部分,改变变量的值;
5、依次重复上面的步骤,直到退出循环
六、循环嵌套
循环嵌套又称为二重循环,二重循环就是一个循环体内又包含另一个完整的循环结构;while、do…while、for这三种循环是可以相互嵌套的。
while嵌套while、do…while嵌套do…while、for嵌套for、while嵌套for这四种是我们比较常用的,下面就介绍这四种嵌套循环的语法和使用吧
1、while嵌套while
语法:
while(循环条件1){
//循环操作1
while(循环条件2){
//循环操作2
}
}
实例:
int i = 1;
while(i <= 10){
System.out.println("清风");
while(i >= 5){
System.out.println("杨柳");
i += 2;
}
i++;
}
2、do…while和do…while的嵌套
语法:
do{
//循环操作1
do{
//循环操作2
}while(循环条件2);
}while(循环条件1);
实例:
int i = 0;
do{
System.out.println("努力");
i++;
do{
System.out.println("学习");
i++;
}while(i > 2);
}while(i > 4);
//结果是:
//努力
//学习
3、for和for的嵌套
语法:
for(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
实例:
for(int i = 0 ;i < 2 ;i++){
System.out.print("努力");
for(int j = 0; j < 2; j++){
System.out.print(j);
}
System.out.println(); //换行
}
//结果是:
//努力01
//努力01
4、while嵌套for
语法:
while(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
实例:
int num = 0;
while(num != 2){
System.out.println("次数:");
for(int i = 0 ;i < 2;i++){
System.out.println(i);
}
num++;
}
//结果是:
//次数:01
//次数:01
在上面的二重循环中,循环条件1和循环操作1我们称为:外循环;循环条件2和循环操作2我们称为:内循环;在二重循环中有一个规定:外循环执行一次,内循环执行所有;内循环执行结束后才再次执行外循环。
七、break和continue的区别
break和continue的区别是:break是终止一个循环,continue是结束本次循环进入下一次循环;break可以使用在switch和循环中,但continue只能用在循环中。
1、break
break在switch结构中也有提到,break在switch中的作用是:用于终止switch语句中的某个分支,使程序跳到switch结构的下一条语句。
break在循环中发挥的作用是:跳出循环,但是如果是在二重循环中,break在那一层循环里面就结束那一层循环;在break后面的语句就将不执行,循环也会停止不再执行。
break可以用在switch中和循环中。
for(int i = 0;i <= 10; i++){
System.out.println("努力");
if(i > 5){ //当i > 5的时候就输出好好学习
System.out.println("好好学习");
break; //遇到break就退出for循环,不再执行循环
}
}
//结果是:输出5遍努力1遍好好学习
2、continue
continue只能用在循环中;continue在循环中的作用是:结束本次循环,进入下一次的循环。
for(int i = 0; i < 5 ; i++){
if(i == 3){ //判断i是否等于3
continue; //当i等于3的时候结束本次循环,跳到for循环中的迭代部分
}
System.out.print("努力" + i +" ");
}
//结果是:努力1 努力2 努力4 努力5
continue语句后面不能再有多余的语句,否则会报错。
在循环结构中:
break语句用于终止某个循环,程序跳到循环体外的下一条语句。
continue语句用于跳出本次循环,进入下一次循环的语句。
数组
一、数组是什么
数组是一种引用型数据类型;也是一个变量。
数组的定义:数组是就是一个变量,用于将相同数据类型的数据存储在内存中。数组中每一个数据元素都属于同一数据类型。数组是在内存空间中划出一串连续的空间来存储数据。
二、数组的基本要素和使用数组步骤
1、数组的基本要素
标识符:其实就是数组名;
数组元素:数组中的数据;
数组下标:相当于是一个编号,但是下标是从0开始的;
元素类型:就是数组中的元素的类型,数组中的元素类型必须是同一类型的。
2、数组的使用步骤
使用数组的四个步骤:声明数组、分配空间、赋值、使用;
1、声明数组:
语法:
1、数据类型[] 数组名;
int[] scores; //定义一个int类型的数组
2、数据类型 数组名[];
int score[]; //定义一个int类型的数组
建议使用第一种定义方式;
2、分配空间
语法:
1、数组名 = new 数据类型[数组长度];
scores = new int[30]; //长度为30的int类型数组
2、数据类型[] 数组名 = new 数据类型[数组长度];
int[] scores = new int[30]; //存储30个int类型的数据
3、赋值
语法:
1、数组名[下标];
scores[0] = 20;
scores[1] = 10;
......
// 向scores数组中存放数据
2、数据类型[] 数据名 = {值1,值2,值3,… ,值n};
int[] scores = {98,67,80,50,90}; // 创建一个长度为5的数组scores
4、使用
使用下标输出需要的数据,如果要输出最后一个数据要用数组长度-1;否则报数组越界的错误。
int[] scores = {85,43,67,83,79,90}; //创建了一个长度为6的数组scores
for(int i = 0 ;i < 6 ;i++;){
System.out.println(scores[i] +" "); //输出scores数组中的数据,用下标输出数组中的值
}
//输出86 43 67 83 79 90
数组名.length; 这是求一个数组的长度;
最后一个数据的输出只能是数组长度-1;
int[] num = {12,34,56,78,90,13,34}; //创建一个数组num
for(int i = 0; i < num.length; i++){ //i的长度到数组的长度停止
System.out.println(num[num.length-1]); //输出num数组中的最后一个元素
}
在数组中长度和值不能同时出现,否则会报错;
int[] num =new int[5]{62,52,96,71,85}; //这样的数组是会报错的
//在有即长度又同时赋值的是不可以的
三、数组排序
在数组中要进行排序,在数组中要如何就行升序排序呢,可以用下面的语法;
语法:
Arrays.sort(数组名);
int[] num = new int[]{25,95,89,34,56};
Arrays.sort(num); //对num数组中的值进行升序排序
for(int i = 0; i < num.length; i++){
System.out.println(num[i]+" "); //循环输出num数组里的值
}
//结果是:25 34 56 89 95
Arrays是Java中提供的一个类,而sort()是该类的一个方法。关于类和方法下次再说,目前只要知道按照上面的语法可以将数组中的值变成升序就可以了。
四、求数组最大值
在数组中我们免不了要求最大值,那我们要如何求数组中的最大值呢,其实不难;
//假设我们要求5个同学的成绩中的最大值
int[] scores = new int[]{85,96,62,78,63}; //5位同学的成绩
int max = 0; //记录最大值
//计算最大值
max = scores[0]; //将数组中的一个值赋给max
for(int i = 1; i < scores.length; i++){ //循环
if(scores[i] > max){ //判断数组中的值是否大于max
max = scores[i]; //将大于max的值赋给max,让max的值始终保持为最大
}
}
注意:无论是在求最大值还是求最小值,都要先把数组中的一个值赋给最大值或最小值定义的变量,才能进行数组中的值的比较;数值类型的数组可以直接比较,但是字符串类型的就不能直接比较了,要用一个方法来进行比较;
字符串的比较:.compareToIgnoreCase()方法
语法:
String1.compareToIgnoreCase(String2);
实例:
if((String[i]).compareToIgnoreCase(String2[i]) > 0){ //两个字符串数组进行比较
System.out.println(String);
}
这就是字符串的比较方法,可以数组和数组进行比较,也可以数组和字符串比较。
五、向数组中插入元素
数组的长度是固定的,但数组中的值数不固定的(数组中的值可以不固定但是值的数量是固定的),如果我们要如何向数组插入一个元素呢。
int[] scores = new int[]{78,89,89,90,98,0}; //多赋一个值,这个值为0,表示插入一个数
int num = 97; //要插入的元素
int index = scores.length; //保存新增加的成绩的插入位置
//找到新元素要插入的位置
for(int i = 0; i < scores.length ; i++){
if(num > scores[i]){
index = i;
break;
}
}
//元素后移
for(int j = scores.length-1; j > index ; j-- ){
scores[j] = scores[j-1]; //index下标开始的元素后移一个位置
}
scores[index] = num; //插入数据
这就是向数组中插入一个数值的方式。
String1.compareToIgnoreCase(String2);
实例:
if((String[i]).compareToIgnoreCase(String2[i]) > 0){ //两个字符串数组进行比较
System.out.println(String);
}
这就是字符串的比较方法,可以数组和数组进行比较,也可以数组和字符串比较。
五、向数组中插入元素
数组的长度是固定的,但数组中的值数不固定的(数组中的值可以不固定但是值的数量是固定的),如果我们要如何向数组插入一个元素呢。
int[] scores = new int[]{78,89,89,90,98,0}; //多赋一个值,这个值为0,表示插入一个数
int num = 97; //要插入的元素
int index = scores.length; //保存新增加的成绩的插入位置
//找到新元素要插入的位置
for(int i = 0; i < scores.length ; i++){
if(num > scores[i]){
index = i;
break;
}
}
//元素后移
for(int j = scores.length-1; j > index ; j-- ){
scores[j] = scores[j-1]; //index下标开始的元素后移一个位置
}
scores[index] = num; //插入数据
这就是向数组中插入一个数值的方式。