1. for循环
语法:
for(表达式①;表达式②;表达式③){
循环体④;
}
表达式①: 定义一个循环变量,并且初始化 如: int i = 1;
表达式②: 循环条件(布尔表达式) 如: i<5;
表达式③: 循环变量的变化规律 如: i++; i+=2; i--;
循环体④: 一组被多次执行的语句.
执行:
[表达式①] //产生了循环变量,并且有了初始值.
[表达式② 真, 循环体④ ,表达式③]
[表达式② 真, 循环体④ ,表达式③]
...
[表达式② 假]
2. 死循环
无法通过循环条件结束的循环叫做死循环,可以在循环体中通过break结束循环
for循环的表达式②不写,表示永远为真.
练习: 新建类ReverseDemo,从键盘输入一个整数n,倒序打印出n
如: n = 12345; //打印出 54321
package cn.tedu.day02;
import java.util.Scanner;
public class ReverseDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
long n = sc.nextLong();
sc.close();
for(;n!=0;){
//打印出个位上的数字
System.out.print(n%10);
//除掉个位
n /= 10;
}
}
}
3. 综合练习
新建类GuessDemo 随机产生一个[1,100]之间的整数,存入变量num中
让用户来猜,共给六次机会,每次猜测都给出相应的提示
例如: 猜大了,猜小了,如果猜对了,打印恭喜字样
六次都没猜度结束循环打印机会已经用完下次再来吧
package cn.tedu.day02;
import java.util.Scanner;
public class GuessDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//随机产生一个[1,100]之间的整数存入变量num中
int num = (int)(Math.random()*100+1);
int i;//在循环外部定义循环变量
//使用for循环让用户猜六次
for(i=1;i<=2;i++){
System.out.println("请猜第"+i+"次:");
//定义变量接受用户输入的数字
int user = sc.nextInt();
if(user>num){
System.out.println("猜大了!");
}else if(user<num){
System.out.println("猜小了!");
}else{
System.out.println("恭喜您猜对了!!!");
break;//提前结束循环
}
}
if(i==3){
System.out.println("机会已经用完,下次再来吧!");
}
sc.close();
}
}
4. 双重循环
可以在某个循环体中,编写循环,这种结构叫做多重循环.
常见的是 双层循环,和三层循环.
双层循环多用于处理二维问题.
外层循环变量用于控制行数
内层循环变量用于控制列数. 系列练习1: 在屏幕上打印出如下图形
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
系列练习2: 在屏幕上打印出如下图形
*
* *
* * *
* * * *
* * * * *
系列练习2: 在屏幕上打印出如下图形
*
* *
* * *
* * * *
* * * * *
package cn.tedu.day02;
public class TriangleDemo {
public static void main(String[] args) {
System.out.println("练习1");
for(int i=1;i<=5;i++){
//打印星号不换行
for(int j=1;j<=5;j++){
System.out.print("* ");
}
//打印换行
System.out.println();
}
System.out.println("练习2");
for(int i=1;i<=5;i++){
//打印星号不换行
for(int j=1;j<=i;j++){
System.out.print("* ");
}
//打印换行
System.out.println();
}
System.out.println("练习3");
for(int i=1;i<=5;i++){
//打印空格
for(int j=1;j<=5-i;j++){
System.out.print(" ");
}
//打印星号不换行
for(int j=1;j<=i;j++){
System.out.print("* ");
}
//打印换行
System.out.println();
}
}
}
练习: 新建类 NineNineSong 使用双层循环打印出乘法口诀表
package cn.tedu.day02;
public class NineNineSong {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
//打印列
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();//换行
}
}
}
练习: 新建类 LotteryDemo 新建一个7个元素的整数数组lots
随机生成7个[1,30]之间的整数存入 lots
要求: 7的数字不能重复
package cn.tedu.day02;
import java.util.Arrays;
public class LotteryDemo {
public static void main(String[] args) {
//定义一个7个整型元素的数组用于存放开奖号码
int[] lots = new int[7];
//定义一个31个布尔型元素的数组 color
boolean[] color = new boolean[31];//默认初始值 false
//使用for循环随机生成7个[1,30]之间的整数
for(int i=0;i<lots.length;i++){
//使用死循环生成一个不重复的数字
for(;;){
//(目标类型)(原始数据)
int num = (int)(Math.random()*30+1);
//如果color[num]是false 没染色
if(!color[num]){
color[num] = true;//染色
lots[i] = num;
break;
}
}
}
System.out.println(Arrays.toString(lots));
}
}
5. 冒泡排序
package cn.tedu.day02;
import java.util.Arrays;
public class BubbleDemo {
public static void main(String[] args) {
//定义一个5个整型元素的数组,并且直接初始化
int[] num = {1,5,12,4,7,6};
System.out.println("排序前:"+Arrays.toString(num));
//使用冒泡法对num数组进行排序(升序)
//外层循环确定比较的轮数
for(int i=1;i<num.length;i++){
int t = 0;
//每一轮的左数的最大下标为 数组长度-轮号-1
for(int j=0;j<num.length-i;j++){
if(num[j]>num[j+1]){
int tmp = num[j];
num[j] = num[j+1];
num[j+1] = tmp;
t++;
}
}
System.out.println("第"+i+"轮");
if(t==0){
break;
}
}
System.out.println("排序后:"+Arrays.toString(num));
}
}
6. 二维数组,数组的数组
语法:
数据类型[][] 数组名 = new 数据类型[m][n];
练习: 新建类ThunderDemo定义一个10行10列的整型二维数组,默认值初始化,
在二维数组中随机布置5个雷,
打印出数组中所有的元素,每行打印10个空格隔开.
package cn.tedu.day02;
public class ThunderDemo {
public static void main(String[] args) {
//定义一个10X10的二维数组
int[][] map = new int[10][10];
//要求在上述地图上随机布置5个雷,不能重复
for(int i=1;i<=5;i++){
//使用死循环随机生成雷的坐标,并保证不重复
while(true){
int row = (int)(Math.random()*10);//生成行坐标
int col = (int)(Math.random()*10);//生成列坐标
//如果不重复
if(map[row][col]!=-1){
map[row][col] = -1;//标记,该坐标已经生成过
break;//结束循环
}
}
}
//打印地图
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(map[i][j]==-1){
System.out.print("X ");
}else{
System.out.print(map[i][j]+" ");
}
}
System.out.println();
}
}
}