目录
猜数小游戏,scanner if while循环 Math.random()
Scanner接收用户输入的数据:共3步
import java.util.Scanner;
Scanner scan=new Scanner(System.in);
int num=scan nextInt();
Scanner就是java给大家提供好的一个零件,它包含了很多很多的功能,
而接收用户输入的数据,只是它其中一个小功能而已
给变量赋值3种情况:
1)赋一个固定的值:
int a = 5;
2)接收用户输入的数据:----------Scanner
int a = scan.nextInt();
3)系统随机生成的值:------------下午讲
Math .random()---------0.0到0.99999999999*1000---------------------0.0到999.999999999
+1--------------------------1.0到1000.99999999
(int)--------------------1到1000
int num=(int)(Math.random()*1000+1
任何复杂的业务逻辑都可以通过三种结构来实现:
- 顺序结构:从上往下逐行执行,每句必走
- 分支结构:有条件的执行某语句一次,并非每句必走
- 循环结构:有条件的执行某语句多次,并非每句必走
if(boolean){ //只判断一次
语句块 //最多执行一次
}
while(boolean){ //判断多次
语句块 //执行多次
}
一.循环三要素:
循环变量的初始化
循环的条件(以循环变量为基础)
循环变量的改变(向着循环的结束变)
循环变量:在整个循环过程中所反复改变的那个数
二. 循环结构:
三种循环结构如何选择:
先看循环是否与次数有关:
若有关------------------------------------------------直接上for
若无关,再看要素1与要素3代码是否相同
若相同------------------------------------------直接上do...while
若不同------------------------------------------直接上while
1.while结构:(先判断后执行 有可能一次都不执行)
1)语法:while(boolean){
语句块
}
2)执行过程:
先判断boolean的值,若为true则执行语句块;
再判断Boolean的值,若为true则执行语句块;
再判断Boolean的值,若为false则结束while循环
/写循环先搭架子while() {} 再写循环三要素
//输出5次行动是成功的阶梯
int times=0;
while(times<5){
System.out.println("行动是成功的阶梯");
times++;
}
//输出9的乘法表
int num=1;
while (num<=9){
System.out.println(num+"*9="+num*9);
num++;
}
//写循环,必须要会写执行过程----带数
/* num=1
true 输出 num=2
true 输出 num=3
true 输出 num=4
true 输出 num=5
ture 输出 num=6
true 输出 num=7
true 输出 num=8
true 输出 num=9
true 输出 num=10
false while循环结束
输出继续执行...
*/
2.do while结构:(先执行后判断 一定会执行一次)
第一要素和第三要素的代码相同时,首选do..while()
1)语法:
do{
语句块/循环体-----反复执行的代码
} while (boolean) ;
2)执行过程:
先执行语句块,再判断boolean的值,若为true则
再执行语句块,再判断boolean的值,若为true则
再执行语句块,如此反复直到boolean的值为false时,do...while循环结束
猜数小游戏,scanner if while循环 Math.random()
package day04;
import java.util.Scanner;
public class Guessing {
public static void main(String[] args) {
//int num=250;//手里先藏个数
int num= (int)(Math.random()*1000+1);//生成随机数
Scanner scan=new Scanner(System.in);
System.out.println("猜吧");
int guess=scan.nextInt();//初始循环变量为用户输入的数
while(guess!=num){
if(guess>num){
System.out.println("太大了");
}else{
System.out.println("太小了");
}
System.out.println("猜吧");
guess=scan.nextInt();//重新赋值 循环变量的改变依然是
}
System.out.println("恭喜你猜对了");
}
}
3.for结构:应用率高,与次数相关的
1. 语法:
1初始化循环变量 2循环条件 3循环变量的改变
(多个for循环中的循环变量可以是一样的:for中的循环变量num的作用域,仅在当前for中)
for(要素1;要素2;要素3){
语句块/循环体---------------反复执行的代码 4
}
- 即使没有1,3 也必须有两个分号for(; ;)
- 2只能有一个boolean条件 多个条件用&&||连接
2.执行过程
1243 243 243 243 243...2为false时,for循环结束
//for中的循环变量num的作用域,仅在当前for中----特殊情况特殊记
for(int num=1;num<=9;num++){
System.out.println(num+"*9="+num*9);
}
for(int num=1;num<=9;num+=2){
System.out.println(num+"*9="+num*9);
}
for(int num=9;num>=1;num--){
System.out.println(num+"*9="+num*9);
}
for(int times=0;times<5;times++){
System.out.println("行动是成功的阶梯");
}
System.out.println("继续执行...");
/*
执行过程:-----带数
times=0 true 输出
times=1 true 输出
times=2 true 输出
times=3 true 输出
times=4 true 输出
times=5 false for循环结束
输出继续执行
*/
//for的特殊格式:
int num=1;
for(;num<=9;num++){
System.out.println(num+"*9="+num*9);
}
for(int num=1;num<=9;){
System.out.println(num+"*9="+num*9);
num++;
}
for(;;){ //没有条件的循环就是个死循环
System.out.println("我要学习...");
}
for(int i=1,j=5;i<=5;i+=2,j-=2){
}
/*
i=1,j=5 true
i=3,j=3 true
i=5,j=1 true
i=7,j=-1 false
*/
随机加法生成器
/随机加法运算器
//10题 答对加10分 打错不加分
//反复出题答题判分 用到循环
/* 2个变量 循环次数i 生成的结果result 回答answer 总分score
总分初始化必须前面 不能放在循环体内
for(int i=1;i<=10;i++){
1. 出题
2. 答题
3. 判题
}
*/
import java.util.Scanner;
public class bAddition {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int score=0;
for(int i=1;i<=10;i++){
int a=(int)(Math.random()*100);
int b=(int)(Math.random()*100);
int result=a+b;
System.out.println(a+"+"+b);//出题
System.out.println("请输入答案");
int answer=scan.nextInt(); //答题
if(answer==-1){ //加需求 输入-1退出 break
break; //需要加载判题的后面 不要输出答错了
}
if(answer==result){ //判题
System.out.println("答对了");
score+=10;
}else {
System.out.println("答错了");
}
}
System.out.println("总分为"+score);
//1+3+5+7+...+99 等差数列求和
int sum=0;
for(int c=1;c<100;c+=2){
System.out.println(c+"+");
sum+=c;
}
System.out.println("结果为"+sum);
}
}
break:提前结束循环
for(int num=1;num<=9;num++){
if(num==5){ //在某种特定条件下,提前结束循环
break; //跳出循环
}
System.out.println(num+"*9="+num*9);
}
/* 执行过程:
num=1 1*9=9
num=2 2*9=18
num=3 3*9=27
num=4 4*9=36
num=5
*/
continue:跳出循环体中剩余语句而进入下一次循环
//输出9的乘法表,跳过能被3整除的
for(int num=1;num<=9;num++){
if(num%3==0){
continue; //跳过循环体中剩余语句而进入下一次循环
}
System.out.println(num+"*9="+num*9);
}
/*
num=1 1*9=9
num=2 2*9=18
num=3
num=4 4*9=36
num=5 5*9=45
num=6
num=7 7*9=63
num=8 8*9=72
num=9
num=10
*/
//输出9的乘法表,只要不能被3整除的
for(int num=1;num<=9;num++){
if(num%3!=0){
System.out.println(num+"*9="+num*9);
}
}
4. 嵌套循环 外行循环一次 内行循环所有次:
- - 循环中套循环,常常多行多列时使用,一般外层控制行,内层控制列
- - 执行规则:外层循环走一次,内层循环走所有次
- - 建议:嵌套层数越少越好,能用一层就不用两层,能用两层就不用三层
- - break只能跳出当前一层循环
九九乘法表
//九九乘法表
public class MultiTable {
public static void main(String[] args) {
for(int num=1;num<=9;num++){ //控制行
for(int i=1;i<=num;i++){ //控制列
System.out.print(i+"*"+num+"="+i*num+"\t");
} //\t水平制表 固定占8位
//print不换行 println 换行打印
System.out.println(); //换行
}
/*
执行过程:
num=3
i=1 1*3=3
i=2 2*3=6
i=3 3*3=9
i=4 false
换行
num=2
i=1 1*2=2
i=2 2*2=4
i=3 false
换行
num=1
i=1 1*1=1
i=2 false
换行
*/
}
}
拓展练习-等腰小星星
//1. 利用for循环计算:求数字1到100之内,所有偶数的和,并输出
int sum=0;
for(int i=2;i<=100;i+=2){
sum+=i;
}
System.out.println( "sum="+sum);
//2. 利用for循环计算:求8的阶乘,并输出 !8=1*2*3*4*5*6*7*8
int product=1;
for(int a=1;a<=8;a++){
product*=a;
} System.out.println("阶乘是"+product);
/* 3. 利用for循环计算:打印字符*组成的等腰三角形,输出结果如下所示:
```java
*
***
*****
*******
*********
***********
```1 1
2 3
3 5
4 7
5 9
6 11
*/
for(int a=1;a<=6;a++){
for(int b=1;b<=6-a;b++){ //int b=5;b>=6-a;b--){
System.out.print(" ");//前面加上对应的空格
}
for(int c=1;c<=2*a-1;c++){
System.out.print("*");//每一行中*递增显示 不需要c个*
}
System.out.println();//每一行结束后换行
}
变量的作用域/范围:
从变量的声明开始,到包含它最近的大括号结束
1. 变量的同名问题:
- 作用域重叠时,变量不能同名