Day04–循环+数组
一、循环结构1:for
-
概述
- 用来解决 需要重复去执行的需求
-
for语法
for(循环的开始位置 ; 循环的条件 ;更改条件){
要重复做的事情
}
- 测试
- 打印100次你的名字
- 打印0~10
- 打印10~0
- 打印8/88/888/8888
- 求【0,100】中,偶数的和
- 求【0,100】中,奇数的个数
package cn.tedu.basic;
import org.junit.jupiter.api.Test;
public class Test01_For {
public static void main(String[] args) {
//1.打印100次你的名字
for(int i =0;i<5;i++) {
System.out.println("Abo");
}
//2.打印0~10
for(int i = 0; i <= 10; i++) {
System.out.print(i+"、");
}
System.out.println();
//3.打印10~0
for(int i=10;i>=0 ;i--) {
System.out.print(i+"、");
}
System.out.println();
//4.打印8/88/888/8888
for(int i =8;i<=8888;i=i*10+8) {
System.out.print(i+"、");
}
}
@Test
public void EvenNum() {
//求【0,100】中,偶数的和
int even=0;//定义变量存储最终偶数的和
int odd=0;//定义变量存储最终奇数的和
for(int i = 0;i<=100;i++) {
if(i%2==0) {
even=even+i;
}else {
odd=odd+i;
}
}
System.out.println("【0,100】中,偶数的和为:"+even+"\n"+"【0,100】中,奇数的和为:"+odd);//2550 奇数为2500
}
@Test
public void OddNum() {
//求【0,100】中,奇数的个数
int odd=0;
for(int i = 0;i<=100;i++) {
if(i%2==1) {
odd++;
}
}
System.out.println("【0,100】中,奇数的个数为:"+odd);//50
}
}
二、嵌套for循环
- 语法
for(开始位置;判断条件;更改条件){//外循环
for(开始位置;判断条件;更改条件){//内循环
循环体;
}
}
-
特点
- 外循环执行1次,内循环执行N次
- 外循环控制行,内循环控制列
-
入门案例
package cn.tedu.basic;
//测试 嵌套for循环
public class Test02_NestFor {
public static void main(String[] args) {
//特点1:外循环执行1次,内循环执行N次
//外循环执行3次,内循环执行5次
for(int i = 0; i<3;i++) {//外循环执行3次
System.out.println(i);
for(int j = 0;j<5;j++) {//内循环执行5次
System.out.println(j);
}
}
System.out.println("=====================");
//特点2:外循环控制行,内循环控制列
for(int x = 0;x<3;x++) {//3行
for(int y = 0;y<5;y++) {//5列
System.out.print("*");//同行展示
}
System.out.println();//换行
}
}
}
1.打印一个5*5的正方形
@Test
public void Square() {
for(int i =1;i<=5;i++) {
for(int j =1;j<=5;j++) {
System.out.print("*");
}
System.out.println();
}
}
2.打印左直角三角形
@Test
public void LeftTriangle() {
for(int i=0;i<5;i++) {
//列数在变,不能写死,跟随行变
for(int j =0;j<=i;j++) { //第一行1列,第二行2列……第五行5列,j随着i变化,故j<=i
System.out.print("*");
}
System.out.println();
}
}
3.打印99乘法表
@Test
public void MulTables() {
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
4.打印右直角三角形(拓展)
@Test
public void RightTriangle() {
//第一次循环:i=0,判断条件成立;执行内循环1:判断条件成立,执行五次,执行内循环2:判断条件成立,执行一次;换行
//第二次循环:i=1,判断条件成立;执行内循环1:判断条件成立,执行四次,执行内循环2:判断条件成立,执行两次;换行
//第三次循环:i=2,判断条件成立;执行内循环1:判断条件成立,执行三次,执行内循环2:判断条件成立,执行三次;换行
//第四次循环:i=3,判断条件成立;执行内循环1:判断条件成立,执行两次,执行内循环2;判断条件成立,执行四次;换行
//第五次循环:i=4,判断条件成立;执行内循环1:判断条件成立,执行一次,执行内循环2:判断条件成立,执行五次;换行
for(int i = 0;i<5;i++) { //外循环,控制行数
for(int j =5;j>i;j--) { //内循环1 填充空格 //打印空的倒三角
System.out.print(" ");
}
for(int k=0;k<=i;k++) { //内循环2 补充*号
System.out.print("*");
}
System.out.println();//内循环1和内循环2都执行完开始换行
}
}
5.打印全三角形(拓展)
package cn.tedu.basic;
//测试5 打印全三角形
public class Test08_HomeWork2 {
public static void main(String[] args) {
for(int i = 1;i<=5;i++) {
for(int j = 5;j>=i;j--) {
System.out.print("^");
}
for(int k =1;k<=i*2-1;k++) {
System.out.print("*");
}
System.out.println();
}
}
}
四,循环结构2:while
- 语法
while(判断条件){
循环体
}
- 特点
- 先判断再执行
- 猜数字
package cn.tedu.basic;
import java.util.Random;
import java.util.Scanner;
//测试 while循环
public class Test04_While {
public static void main(String[] args) {
//产生一个随机数,和用户一直在输入的数字比较。
//参数是产生n以内的随机数--从0开始
//如:参数为1000时,产生【0,999】的随机数
int random = new Random().nextInt(1001);
//循环 括号内填入true表示一直循环
while(true) {
//接收用户输入的一个整数
System.out.print("猜1~1000的随机数");
int num = new Scanner(System.in).nextInt();
//判断
if(num>random) {
System.out.println("你输入的数字偏大");
}else if(num<random) {
System.out.println("你输入的数字偏小");
}else {
System.out.println("恭喜你猜对了!");
break;//猜对的时候结束程序
}
System.out.println("==================================================");
}
}
}
五,循环结构3:do…while
- 语法
do{
循环体
}while(判断条件);
- 特点
- 先执行再判断
- 保证循环体最少执行1次
- 改造猜数字
package cn.tedu.basic;
import java.util.Random;
import java.util.Scanner;
//测试 do...while
public class Test05_DoWhile {
public static void main(String[] args) {
//产生一个1000以内的随机数【0,1000】
int random = new Random().nextInt(1001);
do {
System.out.print("输入一个1000以内的整数:");
int num = new Scanner(System.in).nextInt();
if(num>random) {
System.out.println("偏大");
}else if(num<random){
System.out.println("偏小");
}else {
System.out.println("猜对了!");
break;
}
System.out.println("===============================================");
}while(true);//当判断条件为false时,程序也会执行一次
}
}
六、break和continue
- 概述
- 都可以结束循环
- break–暴力的结束循环,立刻结束
- continue–结束这次,还能继续下一次
- 都可以结束循环
- 测试bn
package cn.tedu.basic;
//测试 结束循环
public class Test06_Break {
public static void main(String[] args) {
//打印[1,100]以内的偶数
for(int i=1;i<=100;i++) {
if(i%2==0) {
System.out.println(i);
//1.都得用在循环结构里
//2.关键字break和continue之后的代码都是不执行的
//break;//立刻结束循环
continue;//结束本次循环,还能继续
}
}
}
}
七、变量
-
概念
-
可以改变的数,称为变量。一般通过三部分来描述一个变量。变量类型,变量名,变量值。其中三部分都是可以改变的,根据需要来确定即可。
-
变量的使用原则:就近原则。尽量控制到最小范围
-
-
局部变量
-
定义在方法里,或者局部代码块中。
-
注意:必须手动初始化,来分配内存。
-
作用域也就是方法里或者局部代码块里,方法运行完内存就释放了。
-
-
成员变量
-
定义在类里。
-
注意:不用初始化,也会自动被初始化成默认值。
-
作用域是整个类中,类消失了,变量才释放。
- 默认值:
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2yBqFC83-1608905057337)(F:\java\Typora笔记\java讲义图片\01-05.htm#_Toc36570881_files\QQ截图01.png)]
- 测试
package cn.tedu.basic;
//测试 变量
public class Test01_Variable {
//1.成员变量,定义在类里方法外,作用范围是整个类里,不用初始化也有默认值
static int age;//整数的成员变量,默认值是0
static double age1;//小数的成员变量,默认值是0.0
static boolean age2;//布尔类型的成员变量,默认值是flase
public static void main(String[] args) {
//2.局部变量,定义在方法里,作用范围是方法体里,必须初始化
int a=10;
System.out.println(a);//10,使用了局部变量
System.out.println(age);//0,使用了成员变量
System.out.println(age1);//0.0,使用了成员变量
System.out.println(age2);//flase,使用了成员变量
System.out.println("======================================================");
//4.当局部变量名和成员变量名相同时,优先使用局部变量(就近原则)
int age=10;
System.out.println(age);//就近原则
System.out.println("======================================================");
//3.由于布尔类型的默认值是false,所以取反条件才成立
if(!age2) {
System.out.println(1);
}
System.out.println("======================================================");
}
}
package cn.tedu.basic;
// 测试 变量--成员变量--局部变量
public class Test3 {
/*2,成员变量:类里 方法外+作用在整个类里+可以不初始化,也会有默认值
* 可以不用初始化-所以可以不用赋值
* 它自己有默认值
* 作用在整个类中都有效
*/
static String name;//引用类型输出默认值都为null
static int num ;//输出默认值0
static short a;//输出变量值0
static double b;//输出默认值0.0
static char c;//输出\u0000--解析不出来
static boolean d; //输出false
int age =20 ;//成员变量--根据就近原则--所以输出方法里面的10
public static void main(String[] args) {
/*1,局部变量:方法里+必须初始化+只在方法里有效
* 初始化的意思就是必须赋值--就是变量必须有变量值
* 只在方法里有效
*/
int age =10 ;
//3,当成员变量名和局部变量名 相同时 ,就近原则,优先使用局部变量
System.out.println(age);
System.out.println(name);
System.out.println(num);
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
拓展
1.三种循环的区别
-
相同点: 都是用来 重复干活的 需求
-
区别:
-
for:知道循环次数
-
while/do while:当循环次数不确定时
-
while:先判断,不符合规则,不执行代码
-
do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
-
2.死循环
- 死循环的本质是:条件永远成立
//while(true) --死循环--必须配合break停止
//死循环的本质是:条件永远成立
// for(int i = 1; i >= 1 ; i++) {//for形式的死循环
for(; ;) {//简写
// while(true) {//经典的死循环写法
System.out.println(1);
if(??){
break;//死循环,必须设置合理的出口!!
}
}
3.练习 找数字88
break的作用是跳出当前循环块(for、while、do while)或程序块(switch)。在循环块中的作用是跳出当前正在循环的循环体。在程序块中的作用是中断和下一个case条件的比较。
continue用于结束循环体中其后语句的执行,并跳回循环程序块的开头执行下一次循环,而不是立刻循环体。
package cn.tedu.basic;
//测试break 或者 continue
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
//练习 :找数字88
//接收用户输入的数字
System.out.println("请输入数字");
/*所以说--break 和 continue 一定要用在循环结构里面
* 不用在循环结构 或者没有循环结构时候会报错--
*/
for(int i=1;i<=10;i++) {
int a =new Scanner(System.in).nextInt();
//判断,是88吗?是就结束,不是就继续
if(a==88) {
System.out.println("猜对了");
break;//立刻结束
}
else if(a!=88) {
System.out.println("请继续输入");
continue;//结束本次 还能再次继续
}
}
}
}
4.产生随机数的方法(三种小方法)
//100的作用是产生100以内的随机数
int a =new Random().nextInt(100);
/产生0~1的随机小数
double b =Math.random();
//利用产生的随机小数*100得到随机整数
int c =(int)(Math.random()*100);
5.八大基本类型的默认值和八大基本类型以外的所有引用类型的默认值
byte–的输出默认值是0;
short–的输出默认值是0;
**int–**的输出默认值是0;
**long–**的输出默认值是0;
float–的输出默认值是0.0;
double–的输出默认值是0.0;
boolean–的输出类型是false;
String等所有的引用类型的输出默认值都是null
6.猜数字游戏–利用循环结构while 和循环结构do…while结构
package cn.tedu.basic;
//测试 While 循环
import java.util.Random;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
//1,接收用户输入的数字
/*System.out.println("请输入一个数字");
int input =new Scanner(System.in).nextInt();
//2,>30。重复打印这个数字
//while 循环--- 先判断在执行
while(input>30) {
System.out.println(input);
}
//do...while循环 --先执行一遍 在判断
do {
System.out.println(input);
}while(input>30);*/
//TODO 练习:猜数字游戏
//让程序产生一个随机数
int a =new Random().nextInt(100);//100的作用是产生100以内的随机数
//double b =Math.random();//产生0~1的随机小数
//int c =(int)(Math.random()*100);//利用产生的随机小数*100得到随机整数
System.out.println(a);
/*while(a>50) {//先判断在执行
//接受用户输入的数字
int m =new Scanner(System.in).nextInt();
if(m>a) {
System.out.println("大了");
}else if(m<a) {
System.out.println("小了");
}else if(m==a) {
System.out.println("猜对了");
break;
}
}*/
do {//先执行在判断
//接受用户输入的数字
int m =new Scanner(System.in).nextInt();
if(m>a) {
System.out.println("大了");
}else if(m<a) {
System.out.println("小了");
}else if(m==a) {
System.out.println("猜对了");
break;//循环结束
//continue;
}
}
while(a>50);
}
}