9、循环结构
循环结构就是在满足某种条件的情况下不断重复的执行某段代码,我们需要在适当的时候将条件变成假以此来结束循环,避免死循环。
While循环
while(条件){
语句;
}
- While循环也是可以省略括号()的,但不建议。
- While循环一定要保证循环有变为false的时候,避免造成死循环。
二、数组
1、数组定义
- 数组是一种类型,属于引用数据类型
- 数组中的所有元素数据类型要一样
- Java中数组既可以存储基本数据类型也可以存储引用数据类型。
- 数组中也可以放自定义的数据类型(可以包含父类和子类,因为父类和子类其实是一种数据类型)
- 数组在内存中是一块连续的空间。
- 数组的空间要在定义的时候被确定,一旦确定不能改变,即使数组中的数据被清楚数组在内存中的空间依然被保存依然属于数组,数组长度依然不变。
(2) 一维数组
1)定义
①int arr1[]=new int[5];
②int arr2[]={1,2,3};
③int arr3[]=new int[]{1,2,3};
2)获取取长度:
System.out.println(arr3.length);
① java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
②java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
③java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
3)遍历数组:
for(int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
//增强for循环
for(int a:arr){
System.out.println(a);
}
4)初始化
- 静态初始化:
①int arr1[]=new int[5];
②int arr2[]={1,2,3};
③int arr3[]=new int[]{1,2,3};
- 动态初始化:
- byte、short、int、long默认为0;
- float、double默认为0.0;
- char默认为\u00001,也就是空格;
- boolean默认为false;
- 引用数据类型默认为null;
5)易错点
int arr[]= new int[2]{1,2}; //错误
6)Array类常用方法:
import java.util.Arrays;
public class ArrayExercise {
public static void main(String[] args){
int arr1[]={1,2};
int arr2[]={11,2,33,1,5};
String []season={"春","夏","秋","冬"};
arr1=arr2; //数组赋值
//遍历数组
System.out.println("1、遍历arr1:");
for(int i:arr1){
System.out.print(i+"\t");
}
System.out.println();
//Arrays类的方法
//判断两数组是否相等
System.out.println("2、判断arr1、arr2是否相等:");
System.out.println(Arrays.equals(arr1, arr2));
//快速排序法
System.out.println("3、快速排序法:");
Arrays.sort(arr2);
for(int i:arr2){
System.out.print(i+"\t");
}
System.out.println();
//产生数组的string表示
System.out.println("4、产生数组的string表示:");
System.out.println(Arrays.deepToString(season));
System.out.println(Arrays.toString(arr2));
//搜索指定数组的指定对象的索引
System.out.println("5、搜索指定数组的指定对象的索引:");
Arrays.sort(arr2);
System.out.println(Arrays.binarySearch(arr2, 2));
//复制数组方法
System.out.println("6、复制数组:");
int arr3[]=Arrays.copyOf(arr2, 3);
for (int i = 0; i < arr3.length; i++) {
System.out.print(arr3[i]+"\t");
}
}
}
//运行结果:
1、遍历arr1:
11 2 33 1 5
2、判断arr1、arr2是否相等:
true
3、快速排序法:
1 2 5 11 33
4、产生数组的string表示:
[春, 夏, 秋, 冬]
[1, 2, 5, 11, 33]
5、搜索指定数组的指定对象的索引:
1
6、复制数组:
1 2 5
Test:
//1、数组定义、获取长度、遍历、初始化练习
public class textArr {
public static void main(String[] args){
//数组的定义
int[] arr1=new int[5];
int[] arr2={1,2,3};
int[] arr3=new int[]{1,2,3,4};
String[] strs=new String[3];
//获取数组长度:
System.out.println("arr3数组的长度为:"+arr3.length);
//遍历数组
System.out.println("arr2数组的内容为:");
for(int i=0;i<arr2.length;i++){
//访问数组元素的方式为:arr[i]
System.out.print(arr2[i]+"\t");
}
//int数组动态初始化
System.out.println();
System.out.println("arr1数组的内容为:");
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+"\t");
}
//String数组动态初始化
System.out.println();
System.out.println("strs数组的内容为:");
for(int i=0;i<strs.length;i++){
System.out.print(strs[i]+"\t");
}
}
}
//运行结果:
arr3数组的长度为:4
arr2数组的内容为:
1 2 3
arr1数组的内容为:
0 0 0 0 0
strs数组的内容为:
null null null
//2、动态给数组赋值、遍历、增强for循环
import java.util.*;
public class ArrayInta {
public static void main(String[] args){
int[] arr=new int[5];
//动态给数组赋值
Scanner scanner = new Scanner(System.in);
for(int i=0;i<arr.length;i++){
System.out.print("请给数组的第"+(i+1)+"个元素赋值:");
arr[i]=scanner.nextInt();
}
//遍历数组元素
System.out.println("遍历数组元素:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
//增强for循环
System.out.println();
System.out.println("增强for循环遍历:");
for(int a:arr){
System.out.print(a+"\t");
}
}
}
//运行结果:
请给数组的第1个元素赋值:2
请给数组的第2个元素赋值: 5
请给数组的第3个元素赋值: 7
请给数组的第4个元素赋值: 1
请给数组的第5个元素赋值: 3
遍历数组元素:
2 5 7 1 3
增强for循环遍历:
2 5 7 1 3
//3、倒序输出一组char类型的数组。
public class ArrayReverse {
public static void main(String[] args){
char []cha={'d','o','g'};
System.out.print("数组cha{'d','o','g'}的倒序为:");
for(int i=cha.length;i>0;i--){
System.out.print(cha[i-1]);
}
}
}
//运行结果:
数组cha{'d','o','g'}的倒序为:god
//4、求数组{1,4,2,6,7,3,5}和值为8的数对
public class MateNum {
public static void main(String[] args){
int[] arr={1,4,2,6,7,3,5};
int n=8;
System.out.println("数组{1,4,2,6,7,3,5}和值为8的数对为");
for(int i=0;i<arr.length;i++){
System.out.print("{"+arr[i]+","+n+"}"+"\t");
}
}
}
//运行结果:
数组{1,4,2,6,7,3,5}和值为8的数对为
{1,8} {4,8} {2,8} {6,8} {7,8} {3,8} {5,8}
//5、动态赋值,找出数组中奇数出现的次数.
import java.util.*;
public class OddNum {
public static void main(String[] args){
int sum;
int oddNum=0;
//动态给数组赋值
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数组的长度:");
sum=scanner.nextInt();
int[] arr=new int[sum];
for(int i=0;i<arr.length;i++){
System.out.print("请给数组的第"+(i+1)+"个元素赋值:");
arr[i]=scanner.nextInt();
}
//遍历数组
System.out.println("您输入的数组为:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
System.out.println();
//计算奇数个数
System.out.print("您输入的数组中奇数出现的次数为:");
for(int i=0;i<arr.length;i++){
if(arr[i]%2==1){
oddNum++;
}
}
System.out.print(oddNum);
}
}
//运行结果:
请输入数组的长度:5
请给数组的第1个元素赋值: 2
请给数组的第2个元素赋值: 5
请给数组的第3个元素赋值: 3
请给数组的第4个元素赋值: 7
请给数组的第5个元素赋值: 4
您输入的数组为:
2 5 3 7 4
您输入的数组中奇数出现的次数为:3
//6、给定一个数组a打印出所有元素的m位随机组合。
public class RandmComb {
public static void main(String[] args){
int[] a={1,2,3,4,5};
int m=3;
System.out.println("数组a={1,2,3,4,5}的所有3位随机组合为:");
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
for(int k=j+1;k<a.length;k++){
System.out.print(a[i]+" "+a[j]+" "+a[k]);
System.out.print(",");
}
}
System.out.println();
}
}
}
//运行结果:
数组a={1,2,3,4,5}的所有3位随机组合为:
1 2 3,1 2 4,1 2 5,1 3 4,1 3 5,1 4 5,
2 3 4,2 3 5,2 4 5,
3 4 5,
//7、输出两个数组中的相同元素。
import java.util.*;
public class Same {
public static void main(String[] args){
int arr1[]={2,4,6,8,10};
int arr2[]={4,8,10,16,20};
System.out.println("两个数组的相同元素为:");
if(arr1.length>=arr2.length){
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr2.length;j++){
if(arr1[i]==arr2[j]){
System.out.println(arr1[i]);
}
}
}
}else{
for(int i=0;i<arr2.length;i++){
for(int j=0;j<arr1.length;j++){
if(arr1[i]==arr2[j]){
System.out.println(arr1[i]);
}
}
}
}
}
}
//运行结果:
两个数组的相同元素为:
4
8
10
//8、动态录入成绩并计算班级平均分。
import java.util.*;
public class ScoreAvg {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int StudentSum;
double ScoreSum=0;
System.out.println("***********成绩录入系统***********");
System.out.print("请输入学生总数:");
StudentSum=scanner.nextInt();
double[] score=new double[StudentSum];
//成绩录入
for(int i=0;i<score.length;i++){
System.out.print("请输入第"+(i+1)+"个学生的成绩:");
score[i]=scanner.nextDouble();
}
//计算总成绩:
for(int i=0;i<score.length;i++){
ScoreSum+=score[i];
}
System.out.println("班级成绩平均分为:"+ScoreSum/StudentSum);
}
}
//运行结果:
***********成绩录入系统***********
请输入学生总数:3
请输入第1个学生的成绩: 98
请输入第2个学生的成绩: 86
请输入第3个学生的成绩: 79
班级成绩平均分为:87.66666666666667