一、For循环
1、for循环语法
for(参数初始化;判断条件;更新循环变量){
方法体
}
注意:
(1)for循环括号后面" ; "不能省略
(2)缺少循环判断条件、更新循环变量,造成死循环
(3)未对参数初始化,造成编译不通过
二、break的用法
break:用于跳出当前循环而执行循环后面的语句
//当i=2的时候跳出循环,break的使用
int count=2;
for (int i = 0; i <5 ; i++) {
if (i==count){
break;
}
System.out.println("------"+i);
}
运行结果:
从上面例子可以看出,当i==2时,循环就截止了。i
三、continue的用法
continue:用于跳过当次循环而执行下次循环
//当i=2的时候跳出循环,countinue的使用
int count=2;
for (int i = 0; i <5 ; i++) {
if (i==count){
continue;
}
System.out.println("------"+i);
}
运行结果:
从运行结果可以看出,当i==2时,跳过当次打印,而执行下次打印。
四、while循环
1.while循环的语法
while(循环条件){
方法体
}
注意:循环条件是循环继续执行的条件
先判断循环条件,然后再执行方法体
例子:录入班级人数和学员成绩,计算班级学员的平均成绩
//录入班级人数和学员成绩,计算班级学员的平均成绩
int i = 1; //学生的起始值
int num = 0; //班级的总人数
double sum = 0; //总成绩
double avg=0;//平均成绩
System.out.println("请输入班级的总人数:");
Scanner in =new Scanner(System.in);
num=in.nextInt();
while (i<=num){
System.out.println("请输入第"+i+"名同学的成绩:");
int temp=in.nextInt();
sum+=temp;
i++;//更新循环变量
}
avg=sum/num;
System.out.println("班级学员的平均成绩:"+avg);
}
重点:切记要写更新循环变量,不写会造成死循环,程序永远退不出。
五、do—while循环
1.do—while循环的语法
do{
方法体
}while(循环条件);
注意:循环条件括号后面的“;”
先执行方法体,然后再判断循环条件
例子:连续录入学生姓名,输入“q”则系统退出
//连续录入学生姓名,输入“q”则系统退出
Scanner in =new Scanner(System.in);
String name="";
do {
System.out.println("请输入学生的姓名:");
name=in.nextLine();
}while (!name.equals("q"));
六、嵌套循环
理解:外循环执行一次,内循环执行一圈。
例子:输出100~200之间所有的素数,控制台每行输出8个素数
素数的概念:素数又称质数,就是在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数或素数。还可以说成质数只有1和它本身两个约数。
//输出100~200之间所有的素数,控制台每行输出8个素数
int count=0;//控制在控制台输出的个数
for (int i = 100; i <=200 ; i++) {
int j = 2;//比1大的整数中,寻找除了1和它本身之外,没有其他的约数
while (i%j!=0){
j++;
if (i==j){
System.out.print(i+"\t");
count++;
if (count%8==0){
System.out.println();
}
break;
}
}
}
七、总结循环
1、循环结构的意义
需要多次重复执行一个或多个任务的问题考虑使用循环来解决
2、while、do—while、for的区别
(1)初始条件不满足循环条件
while、for循环一次都不会执行
do—while循环不管任何情况都至少执行一次
八、数组
1、数组的定义
数组是一个变量,存放相同数据类型(之前说的八种基本数据类型、引用数据类型)的一组数据。
注意:数组下标索引是从“0”
2、数组的声明与赋值
//数组的声明(int类型)
int[] a;
//给数组分配空间(int类型)
a = new int[8];
//数组赋值
a[0]=3;
//处理数据
System.out.println(a[0]*10);
(1)数组声明语法:
数据类型 数组名 [] (Java采用这样写的,因此推荐这样写)
数据类型 [] 数组名(c/c++是这样写的)
(2)声明数组并分配空间
数据类型[ ] 数组名 = new 数据类型[大小] ;
(3)声明数据并赋值
//第一种:边声明边赋值
int [] a= new int []{89,79,76};
//第二种:边声明边赋值
int [] a={89,79,76};
//第三种:动态从键盘输入赋值
Scanner in =new Scanner(System.in);
//边声明边赋值
int [] a=new int[10];
for (int i = 0; i <a.length; i++) {
a[i]= in.nextInt();
}
常见错误:
//必须写明数组的大小
int[ ] score = new int[ ];
//数组创建和赋值必须在一行语句中完成
int[ ] score = new int[5];
score = {60, 80, 90, 70, 85}
预备知识:
栈内存:用来存放在函数中定义的一些基本类型的变量和对象的引用变量
堆内存:用来存放由new创建的对象和数组
三、数组常见的操作
(1)求平均值
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
double sum=0;
double avg=0;
int []a={8,4,2,1,23,34,12,9,15,66};
for (int i = 0; i <a.length ; i++) {
sum+=a[i];
}
avg=sum/a.length;
System.out.println("该数组的平均值为:"+avg);
(2)求最大(小)值
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
//寻找数组中的最大值
int[] a = {8, 4, 2, 1, 23, 34, 12, 9, 15, 66};
int max=a[0];
for (int i = 0; i < a.length; i++) {
if(a[i]>max){
max=a[i];
}
}
System.out.println("数组中的最大值为:"+max);
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
//寻找数组中的最小值
int[] a = {8,4,2,1,23,34,12,9,15,66};
int min = a[0];
for (int i = 0; i < a.length; i++) {
if(a[i]<min){
min=a[i];
}
}
System.out.println("数组中的最小值为:"+ min);
(3)根据下标找到数组中的值
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
//根据下标找到数组中的值
Scanner in =new Scanner(System.in);
int []a={8,4,2,1,23,34,12,9,15,66};
int temp=0;
System.out.println("请输入你要查找的下标:");
int index=in.nextInt();
if (index>=0&&index<a.length){
for (int i = 0; i <a.length ; i++) {
if (index==i){
temp=a[i];
}
}
System.out.println("你要查找的值为:"+temp);
}else {
System.out.println("你输入的下标不在数组中");
}
(4)根据值找到数组中的下标
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
//根据下标找到数组中的值
Scanner in =new Scanner(System.in);
int []a={8,4,2,1,23,34,12,9,15,66};
int temp=-1;
System.out.println("请输入你要查找的值:");
int index=in.nextInt();
for (int i = 0; i <a.length ; i++) {
if (index==a[i]){
temp=i;
}
}
if (temp==-1){
System.out.println("你输入的值不在数组中");
}else {
System.out.println("你输入的值在数组中的下标为:"+temp);
}
(5)冒泡排序
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
//冒泡排序
int []a={8,4,2,1,23,34,12,9,15,66};
//外层循环趟数
for (int i = 0; i <a.length-1 ; i++) {
//内层循环控制对比次数
for (int j = 0; j <a.length-1-i ; j++) {
//从小到大(改变排序顺序,就改变if条件)
if (a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
(6)二分查找
public static int digui(int[] arr, int left, int right, int key) {
if (left <= right) {
int mid = (left + right) / 2;
//在中间
if (arr[mid] == key) {
return mid;
}
//在右边
else if (arr[mid] < key) {
left = mid + 1;
return digui(arr, left, right, key);
}
//在左边
else {
right = mid - 1;
return digui(arr, left, right, key);
}
}
return -1;
}
public static void main(String[] args) {
//有一个数组:{8,4,2,1,23,34,12,9,15,66}
//二分查找法,前提条件是数组必须有序
Scanner in = new Scanner(System.in);
int[] a = {8, 4, 2, 1, 23, 34, 12, 9, 15, 66};
//对数组进行排序
Arrays.sort(a);
//二分查找
System.out.println("请输入你要查找的数字:");
int s = in.nextInt();
//传入函数查找数字,返回数组下标
int index=digui(a, 0, a.length - 1, s);
if (index == -1) {
System.out.println("你要找的数字不在数组中!");
} else {
System.out.println("你要找的数字的下标为:"+index);
}
}