1.加强Foreach循环:
语法:for(数据类型 当前遍历元素的一个指代:数组名){
循环体
}
注意:Foreach循环只能用来循环访问数组或者集合中的元素。不能对数组中的元素进行修改,增加,删除。
Foreach循环只能用来访问数组中的元素。for循环可以对数组中的元素作任意操作。
案例:
public class ForeachTest{
public static void main(String[] args) {
int[] nums={1,5,8,7,6,3};
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+"\t");
}
System.out.println();
for (int n: nums) {
System.out.print(n+"\t");
}
}
}
2.二维数组:数据类型相同的一个数组,数组中的每一个元素是一个一维数组。
(1)二维数组的声明:
a.数据类型[][] 数组名;
b.数据类型[][] 数组名=new 数据类型[长度][长度(可选)];
(2)二维数组的空间分配:
a.数组名=new 数据类型[长度1][长度2];
b.数组名=new 数据类型[长度1][];
数组名[下标]=new 数据类型[长度2];
(3)二维数组的赋值
a.静态赋值:int[][] nums=new int[][]{{5,3,5},{7,8}};
int[][] nums={{5,3,5},{7,8}};
b.动态赋值:
//声明2个长度的二维数组,数组中每个元素是一个一维数组,一维数组的长度没写
int[][] nums=new int[2][];
//给二维数组中的第一个空间中的一维数组分配空间
nums[0]=new int[2];
//给二维数组中的第一个空间中的一维数组中的第一个空间动态赋值
nums[0][0]=5;
(4)访问二维数组
String[][] nickNames={{"熊二","ceo"},{"灰太狼","熊大","光头强"},{"海王","张三"}};
//访问二维数组,外层循环控制二维数组的每个空间,里层控制二维数组中每个空间的一维数组的空间
for(int i=0;i<=nickNames.length-1;i++){
for(int j=0;j<=nickNames[i].length-1;j++){
System.out.print(nickNames[i][j]+"\t");
}
System.out.println();
}
//访问二维数组,n1指代的是二维数组中遍历的当前空间的值(第实际上是一个一维数组),n2指代的是一维数组中遍历的当前空间的值(第实际上是一个值)
for (String[] n1 : nickNames) {
for (String n2 : n1) {
System.out.print(n2+"\t");
}
System.out.println();
}
============================================================================
public class Arrays1Test {
/**
* @param args
*/
public static void main(String[] args) {
//声明一个二维数组,并给它分配空间
String[][] names;
names=new String[2][];
//声明一个二维数组同时给它分配空间
int[][] ages=new int[5][];
//在声明数组的同时,给它分配空间并静态赋值
String[][] nickNames={{"熊二","ceo"},{"灰太狼","熊大","光头强"},{"海王","张三"}};
//给二维数组动态赋值
names[0]=new String[2];
names[0][0]="张三1";
names[0][1]="张三2";
names[1]=new String[3];
names[1][0]="李四1";
names[1][1]="李四2";
names[1][2]="李四3";
//访问二维数组,外层循环控制二维数组的每个空间,里层控制二维数组中每个空间的一维数组的空间
for(int i=0;i<=nickNames.length-1;i++){
for(int j=0;j<=nickNames[i].length-1;j++){
System.out.print(nickNames[i][j]+"\t");
}
System.out.println();
}
System.out.println("=======================================");
//访问二维数组,n1指代的是二维数组中遍历的当前空间的值(第实际上是一个一维数组),n2指代的是一维数组中遍历的当前空间的值(第实际上是一个值)
for (String[] n1 : nickNames) {
for (String n2 : n1) {
System.out.print(n2+"\t");
}
System.out.println();
}
}
}
用二维数组输出杨辉三角
public class YangHui {
public static void main(String[] args) {
//整个杨辉三角用二维数组
int[][] nums=new int[10][];
//杨辉三角第一行
nums[0]=new int[1];
nums[0][0]=1;
//杨辉三角第二行
nums[1]=new int[2];
nums[1][0]=1;
nums[1][1]=1;
//外层循环控制杨辉三角的行号,也即是二维数据的每个空间,前面两行的值是固定,我们从第三行开始
for(int i=2;i<=nums.length-1;i++){
//内层循环控制杨辉三角的每一行的数字,也即是二维数据的每个空间的一维数组中的值
nums[i]=new int[i+1];
for(int j=0;j<=nums[i].length-1;j++){
if(j==0||j==nums[i].length-1){
nums[i][j]=1;
}else{
nums[i][j]=nums[i-1][j]+nums[i-1][j-1];
}
}
}
System.out.println("输出10行杨辉三角:");
for(int i=0;i<=nums.length-1;i++){
for(int j=0;j<=nums[i].length-1;j++){
System.out.print(nums[i][j]+"\t");
}
System.out.println();
}
}
}
作业讲解
-
素数也叫质数.是除了1和其本身,不能被其他正整数整除的正整数.
a) 例如:2,3,5,7,11,13,17,19,23…
a) 写一个方法判断该数是否为素数(设计成一个方法 boolean)
b) 输出某个范围内的所有素数,比如100-200之间。
第一问:
public class Shu1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个正整数:");
int num=input.nextInt();
if(num>1){
boolean result= isSuShu(num);
if (result==true) {
System.out.println(num+"是质数");
} else {
System.out.println(num+"不是质数");
}
}else if(num==1){
System.out.println(num+"不是质数");
}else{
System.out.println("输入有误!");
}
}
/**
* 判断一个数是否是质数
* @param a 要判断的数
* @return boolean true表示是质数,false表示不是质数
*/
public static boolean isSuShu(int a) {//a=5
boolean flag=true;//标记是质数
for(int i=2;i<a;i++){
if(a%i==0){
flag=false;
break;
}
}
return flag;
}
第二问:
public class Shu2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个范围的最小值:");
int num1=input.nextInt();
System.out.println("请输入一个范围的最大值:");
int num2=input.nextInt();
int count=0;//作标记,专门用来计数有多少个质数
if(num1<=num2&&num1>0){
System.out.println(num1+"到"+num2+"范围内,所有的质数为:");
for(int i=num1;i<=num2;i++){
if(i!=1){//先把1排除
//调用方法判断当前数是否是质数
boolean result=isSuShu(i);
if(result==true){//当前的数就是质数
System.out.print(i+"\t");
count++;
}
}
}
System.out.println("\n共有"+count+"个质数");
}else{
System.out.println("输入不误!");
}
}
/**
* 判断一个数是否是质数
* @param a 要判断的数
* @return boolean true表示是质数,false表示不是质数
*/
public static boolean isSuShu(int a) {//a=5
boolean flag=true;//标记是质数
for(int i=2;i<a;i++){
if(a%i==0){
flag=false;
break;
}
}
return flag;
}
}
-
闰年,能被4整除而且不能被100整除,或者能被400整除就是闰年
a) 判断某个年份是否为闰年(设计成一个方法 boolean)
b) 输出一个范围内的哪些年份是闰年(从2000至2020年)
第一问:
public class Zy5 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个年份:");
int num=input.nextInt();
boolean result=isYear(num);
if(result==true){
System.out.println(num+"是闰年");
}else{
System.out.println(num+"不是闰年");
}
}
/**
* 判断一个年份是否是闰年
* @param year 年份
* @return boolean
*/
public static boolean isYear(int year) {
if((year%4==0&&year%100!=0)||year%400==0){
return true;
}else{
return false;
}
}
}
第二问
public class Zy52 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个范围的最小年份:");
int num1=input.nextInt();
System.out.println("请输入一个范围的最大年份:");
int num2=input.nextInt();
if(num1<=num2&&num1>0){
System.out.println(num1+"到"+num2+"范围内是闰年的是:");
for (int i = num1; i <=num2; i++) {
boolean result=isYear(i);
if(result==true){
System.out.print(i+"\t");
}
}
}else{
System.out.println("输入有误");
}
}
/**
* 判断一个年份是否是闰年
* @param year 年份
* @return boolean
*/
public static boolean isYear(int year) {
if((year%4==0&&year%100!=0)||year%400==0){
return true;
}else{
return false;
}
}
}
============================================================================
(1)挑战级:优化抽奖程序,要求对里面存储的学员姓名信息进行管理,可以对数据进行增加,删除,和查询的功能(可选)
功能展示如下:
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
1
请输入学员姓名:
zhangsan
添加成功!
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
1
请输入学员姓名:
zhangsan
该学员姓名已经存在,是否继续录入?(y/n)
y
请输入学员姓名:
lisi
添加成功!
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
3
查询学员信息–>>
zhangsan
lisi
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
2
请输入学员姓名:
wangwu
该学员不存在,是否继续录入?(y/n)
y
请输入学员姓名:
lisi
删除成功!
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
3
查询学员信息–>>
zhangsan
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
4
谢谢使用!
public class Student {
public static void main(String[] args) {
String[] students=new String[100];
menu(students);
}
/**
* 抽奖系统主菜单
*/
public static void menu(String[] students) {
Scanner input = new Scanner(System.in);
System.out.println("幸运抽奖程序");
System.out.println("1.添加学员信息");
System.out.println("2.删除学员信息");
System.out.println("3.查询学员信息");
System.out.println("4.退出");
System.out.println("请输入您的选择:");
int choice = input.nextInt();
switch (choice) {
case 1:
//添加学员信息
addStu(students);
//操作完后,进入主菜单
menu(students);
break;
case 2:
//删除学员信息
delStu(students);
//操作完后,进入主菜单
menu(students);
break;
case 3:
//查询学员信息
seachStu(students);
//操作完后,进入主菜单
menu(students);
break;
case 4:
System.out.println("谢谢使用!");
System.exit(0);//正常退出系统,jvm关闭
break;
default:
System.out.println("输入有误!");
menu(students);
break;
}
}
/**
* 添加学员信息
* @param students 学生姓名数组
*/
public static void addStu(String[] students) {
Scanner input = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String stuName=input.next();
//判断数组中是否有与当前输入的姓名重名
boolean flag=false;//标记是否重名,false表示不重名
for (int i = 0; i < students.length; i++) {
if(students[i]!=null&&students[i].equals(stuName)){
flag=true;
break;
}
}
if(flag==true){//输入的姓名重名
System.out.println("该学员姓名已经存在,是否继续录入?(y/n)");
String choice2=input.next();
if (choice2.equals("y")) {//输入y重复添加学生这个操作,调用自身的方法
addStu(students);
}
}else{//不重名,就可以将学生添加到数组中
for (int i = 0; i < students.length; i++) {
if(students[i]==null){
students[i]=stuName;
System.out.println("添加成功");
break;
}
}
}
}
/**
* 查询学员信息
* @param students
*/
public static void seachStu(String[] students) {
System.out.println("查询学员信息-->>");
for (int i = 0; i < students.length; i++) {
if(students[i]!=null){
System.out.println(students[i]);
}
}
}
/**
* 删除学生信息
* @param students
*/
public static void delStu(String[] students) {
Scanner input = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String stuName=input.next();
boolean flag=false;//标记此学生在数组中是否存在,false表示不存在
int index=0;//要删除学生在数组中的下标
//判断要删除的学生姓名是否在数组中存在
for (int i = 0; i < students.length; i++) {
if (students[i]!=null&&students[i].equals(stuName)) {
flag=true;
index=i;
break;
}
}
if (flag==true) {//删除学生姓名,并将它后面的值依次往前面移
students[index]=null;//删除学生
//并将它后面的值依次往前面移
// for (int i = index; i < students.length-1; i++) {
// if(students[i+1]!=null){
// students[i]=students[i+1];
// }
// }
System.out.println("删除成功!");
} else {//删除的学生姓名在数组中不存在
System.out.println("该学员不存在,是否继续录入?(y/n)");
String choice3=input.next();
if (choice3.equals("y")) {//重新执行删除操作
delStu(students);
}
}
}
}