1.内容回顾:
1.1运算符
算术运算符
关系运算符
逻辑运算符
赋值运算符
byte b = 3; b+=1; 正确的 = b+1; 错误的
字符串连接运算符
三目运算符
1.2分支结构:
if…else
switch…case
2.循环结构:
问题:输出10次hello
循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性执行
2.1 Java中的循环结构
1. while循环
1.1结构
while(表达式 - boolean){
//要反复执行的代码 – 循环体
}
表达式:对1-100数字进行判断
循环体:对数字进行奇数偶数判断
执行机制:
先对表达式进行运算,如果为true,进入循环体执行内容,完成之后再次对表达式进行判断,如果依然为true,那么继续执行循环体,之后再判断,知道表达式结果为false,此时不进入循环体,直接结束循环。
案例:输出10次hello
练习:输出1-100之间所有的偶数
int i = 1;
while(i<101){
//对这个数字进行奇偶判断
if(i%2==0){
System.out.print(i+" ");
}
//对i自增
i++;
}
1.2 break关键字:
break用于循环:跳出当前循环
练习题:
输出1-100之间的所有偶数,输出到56为止
int x = 0;
while(x<101){
if(x%2==0){ //是偶数
if(x==56){
//跳出循环
break;
}
System.out.println(x);
}
x++;
}
练习:
程序随机生成并存储一个整数,(1-100)用户输入一个整数,程序给出与存储的数字“大”或“小”的比较结果提示;直到用户猜对数字为止;如果中途,用户希望结束程序,可以输入0退出。
public class GuessNumberGame {
public static void main(String[] args) {
//随机生成一个随机整数 1-100
int random = (int)(Math.random()*100)+1;
System.out.println(random);
//用户输入整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入猜测的数字:1-100之间,如果输入0,结束程序");
int num = sc.nextInt();
//进行比较,给出提示
while(num!=random){
if(num==0){
System.out.println("即将退出程序!");
break;
}
if(num>random){
System.out.println("猜大了!");
}
if(num<random){
System.out.println("猜小了!");
}
System.out.println("请再次输入数字:");
num = sc.nextInt();
}
if(num==random){
System.out.println("恭喜你,猜对了!");
}
sc.close();
}
}
1.3 死循环
一般情况下,循环操作中会存在使得循环条件不满足的可能性,否则将成为“死循环”。
while(true){
//循环体
}
死循环是否应该出现的程序中?
如果程序的预期结果不是死循环,那么此时就不应该出现
但是,在java中,有一些场景是需要用死循环来模拟出来的。
3.do..while循环
2.1结构:
do{
//循环体
}while(表达式 - boolean);
执行机制:
第一次先执行循环体,再对表达式进行运算,如果返回true,那么再次循环,直到表达式返回false为止,false,循环结束
练习:用户输入密码,如果输入错误,重新输入,直到输入正确
//ATM机输入用户密码,如果错误,重新输入,直到正确
//注意点:变量的作用范围:紧邻它的一对{}
Scanner sc = new Scanner(System.in);
int password;
do{
System.out.println("请输入密码:");
password = sc.nextInt();
}while(password=123456);
System.out.println("登录成功!");
sc.close();
while循环和do…while循环的比较
while:先判断后执行
– while循环的循环体从来没有执行
do..while:先执行,后判断
– 循环体至少执行一次
4.for循环
3.1结构
for(表达式1;表达式2;表达式3){
//循环体
}
表达式1:初始化变量
表达式2(判断条件):一定返回一个boolean
表达式3:变量的变化
执行机制:
初始化部分只执行一次,变量变化部分在第一次的时候不会执行
for(变量初始化;判断部分;变量变化){}
练习题:
打印出1-100之间所有的偶数
//输出1-100之间所有的偶数
for(int i=1;i<101;i++){
if(i%2==0){
System.out.print(i+" ");
}
}
求1-100的和
//求1-100的和
int sum = 0;
for(int i=1;i<101;i++){
sum += i;
}
System.out.println(sum);
求1-100之间所有偶数之和
int sum = 0;
//求1-100之间所有偶数的和
for(int i=1;i<101;i++){
//对i进行判断
if(i%2==0){
sum += i;
}
}
System.out.println(sum);
5.注意点:for循环三个表达式特殊用法(4)
1.
int i= 1;
for(;i<10;i++){…}
2.
for(int i=1;i<10;){
System.out.println(i);
i++;
}
3.
for(int i=1,j=1;i<10;i++,--j){}
//for循环中,表达式1和表达式3可以放多个表达式,用,隔开;但是表达式2不可以
4.for(;;){….} //–for循环中的死循环
- break,continue得用法:
break:用于循环,跳出当前循环
可以用于循环和分支
continue:可以用于循环
作用:跳出本次循环,继续下次循环
4生成随机数:
Math.random() 0-1随机数 包括0不包括1
如何取到整数随机数
int i = (int)(Math.random()*100)
5案例:
1. 1-100求和,当和>300时跳出循环并输出此时i的值
//求1-100的和,当>300结束,并输出i的值
int sum = 0;
for(int i=1;i<=100;i++){
sum += i; //300 325
if(sum >300){
System.out.println(i);
System.out.println(sum);
break;
}
}
- 1-100求和,统计总和时,跳过所有个位为3的数字
//求1-100的和,个位是3的数字不加
int sum = 0;
for(int i=1;i<=100;i++){
//先判断
if(i%10==3){
continue;
}
sum += i;
}
System.out.println(sum);
3.循环问题
循环语句的选择
1.如果业务可以转换为“当…”这样的句式时,优先选择 while语句来实现
案例:年存款利率为3%,本金为10000,存款总额超过12000时收益具体是多少?
10000 0.03 total = 10000+1000*0.03
当总金额超过12000的时候的收益具体是多少
条件:total<=12000
循环体:总金额计算
public static void main(String[] args) {
//利率0.03,本金10000,计算总金额超过12000时具体收益
double total = 10000;
while(total<=12000){
total += total *0.03;
}
double m = total - 10000;
System.out.println(m);
}
2.如果业务可以转换为“直到…”这样的句式时,优先选择 do-while语句来实现
实例:验证身份时必须提供密码并核对
3.如果业务中可以获取到一个确切的循环次数考虑for循环
- 循环嵌套
1.打印九九乘法表
//9行9列
for(int i=1;i<10;i++){ //i代表行
for(int j=1;j<=i;j++){ //j代表列
//\t 制表符
System.out.print(j+"*"+i+"="+i*j+"\t"); // 1 * 1 =1
}
System.out.println();
}
用*打印四行四列的正方形
public static void main(String[] args) {
//变量代表打印几行
for(int i=0;i<4;i++){ //i代表行
//打印4列*
for(int j=0;j<4;j++){ //j代表列
System.out.print("* ");
}
System.out.println(); //换行
}
}
2.输出1-100之间所有的质数
//质数 - 输出1-100之间的所有质数
for(int i=2;i<101;i++){ //i : 1-100
//对i进行质数判断
int count = 0;
for(int j=2;j<=i;j++){//j:2-i
if(i%j==0){
count++;
}
}
if(count==1){
System.out.print(i+" ");
}
}
6.练习:
1.写出输出结果
- 有数列:9,99,…,9999999999.(10个9)要求使用程序计算此数列的和,并在控制台输出。
- 求100-1000间的水仙花数
- 求两个数的最大公约数和最小公倍数
- 求一个数的质因数
- 程序依次出10道加法题目,由用户输入题目的答案;用户每答完一道题,程序判断对错,并提示:“答对了”或“答错了”;10道题目答完之后,系统计算得分并输出(每题10分);若用户希望提前结束,可以输入-1提前退出。
- 案例:累加十次输入的数字的和