⭐ 作者:小胡_不糊涂
作者主页:小胡_不糊涂的个人主页
收录专栏:浅谈Java
持续更文,关注博主少走弯路,谢谢大家支持
基本语法格式:
while(循环条件){
循环语句;
}
循环条件为 true,则执行循环语句;否则结束循环。
一个循环,肯定有开始,有结束
实例1:打印 1-10 的数字
public static void main(String[] args) {
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
}
运行结果:
实例2:计算 1-100 的和
public static void main(String[] args) {
int n = 1;
int sum = 0;
while (n <= 100) {
sum += n;//sum=sum+n,实现累加
n++;
}
System.out.println(sum);
}
运行结果:
实例3:求 1-100 以内偶数的和
//1-100偶数的和
public static void main(String[] args) {
int sum1 = 0;
int a = 2;
while (a <= 100) {
sum1 += a;
a += 2;
}
System.out.println(sum1);
}
//1-100奇数的和
public static void main(String[] args) {
int sum2 = 0;
int a = 1;
while (a <= 100) {
sum2 += a;
a += 2;
}
System.out.println(sum2);
}
实例4:计算 5 的阶乘
5!=54321
4!=4321
3!=321
2!=21
1!=1
0!=1
public static void main(String[] args) {
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;//累乘
n++;
}
System.out.println(result);
}
运行结果:
实例5:计算 1!+2!+…+5!
这里既要算加法,还要算阶乘。在每一个数字阶乘计算后,然后求和,我们可以采用嵌套循环,内循环负责求阶乘,外循环负责求和。
public static void main(String[] args) {
int num = 1;
int sum = 0;
// 外层循环负责求阶乘的和
while (num <= 5) {
int k = 1;
int i = 1;
// 里层循环负责完成求阶乘
while (i <= num) {
k *= i;//k=k*i
i++;
}
sum += k;//sum=sum+k
num++;
}
System.out.println("sum = " + sum);
}
运行结果:
实例6:找到1-100之间既能被3整除也能被5整除的数
public static void main(String[] args) {
int i = 1;
while (i <= 100) {
if(i % 15 != 0) {
i++;
continue;//有关continue的介绍在下面
}
System.out.println(i);
i++;
}
}
运行结果:
注:
比如:
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
//[无任何输出, 程序死循环]
这里为 while 的语句体(这是一个空语句),实际的 { } 部分和循环无关,此时循环条件 num <= 10 恒成立,导致代码死循环。
break 的功能是让循环提前结束
实例:找到 100 - 200 中第一个 3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
}
运行结果:
执行到 break 就会让循环结束。
continue 的功能是跳过这次循环,立即进入下次循环
实例:找到 100 - 200 中所有 3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
}
运行结果:
执行到 continue 语句的时候,就会立刻进入下次循环(判定循环条件),从而不会执行到下方的打印语句。
基本语法:
for(表达式1;布尔表达式2;表达式3){
表达式4;
}
表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
表达式2: 循环条件,满足则循环继续,否则循环结束
表达式3: 循环变量更新方式
实例1:打印 1-10 的数字
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
运行结果:
实例2:计算 1-100 的和
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <= 100; i++) {
sum += i;//sum=sum+i 累加
//第一次:sum=0+1=1
//第二次:sum=1+2=3
//第三次:sum=3+3=6...
}
System.out.println("sum = " + sum);
}
实例3:计算 5 的阶乘
public static void main(String[] args) {
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
//第一次:result=1*1=1
//第二次:result=1*2=2
//第三次:result=2*3=6...
}
System.out.println("result = " + result);
}
实例4:计算 1!+2!+…+5!
public static void main(String[] args) {
int sum = 0;
//外循环:求和
for (int i = 1; i <= 5; i++) {
int tmp = 1;
//内循环:计算每位数字的阶乘
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
}
注:
基本语法:
do{
循环语句;
}while(循环条件);
先执行循环语句,再判定循环条件,循环条件成立则继续执行,否则循环结束。
实例: 打印 1-10 的数字
public static void main(String[] args) {
int num = 1;//num 的初始条件
do {
System.out.println(num);
num++;
} while (num <= 10);//循环条件
}
注:
基本语法:
System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
println 输出的内容自带 \n,print 不带 \n。(\n:换行)
printf 的格式化输出方式和 C 语言的 printf 是基本一致的。
代码示例:
public static void main(String[] args) {
System.out.println("hello world");//直接打印 hello world
int x = 10;
System.out.printf("x = %d\n", x);//打印 x=10
}
格式化字符串
转换符 | 类型 | 举例 | 结果 |
---|---|---|---|
d | 十进制整数 | (“%d”,100) | 100 |
x | 十六进制整数 | (“%x”,100) | 64 |
o | 八进制整数 | (“%o”,100) | 144 |
f | 定点浮点数 | (“%f”,100f) | 100.000000 |
s | 字符串 | (“%s”,100) | 100 |
c | 字符 | (“%c”,‘1’) | 1 |
b | 布尔值 | (“%b”,100) | true |
% | 百分号 | (“%.2f%%”,2/7f) | 0.29% |
使用 Scanner 读取字符串/整数/浮点数
import java.util.Scanner; // 需要导入 util 包
public class Cycle_logitic {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//输入,sc 由用户自己定义
System.out.println("请输入你的姓名:");//输出
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法
}
运行结果:
使用 Scanner 循环读取 N 个数字,并求取其平均值
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
while (sc.hasNextInt()) {
int tmp = sc.nextInt();//输入
sum += tmp;//求和
num++;
}
//输出
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);//计算均值
sc.close();
}
运行结果:
玩法:玩家随便输入1-100以内的整数,计算机会提示你是否猜对,如果没猜对,会告诉玩家是猜大了还是猜小了,然后用户继续猜数,直到成功。
程序设计关键:
1. 在 Java 中设置随机数需要用到一个包:
import java.util.Random;
如果想要控制在 100 以内,代码实现是:
Random random = new Random(); // 默认随机种子是系统时间
int toGuess = random.nextInt(100);//设置范围:[0-100)+1
2. 用户输入数字:
上文已经总结过,如何输入一个数字。用户输入时也需要一个包:
import java.util.Scanner;
//实现输入数字
Scanner sc = new Scanner(System.in);//这里的 sc 由用户自定义
3. 判断用户输入的数字大小:
这里我们用 if 语句处理:
int num = sc.nextInt();//将输入的数字赋给 num
if (num < toGuess) {
System.out.println("低了");
} else if (num > toGuess) {
System.out.println("高了");
} else {
System.out.println("猜对了");
break;//跳出循环
}
4. 然后我们将代码整合一下:
import java.util.Scanner;
import java.util.Random;
public static void main(String[] args) {
Random random = new Random(); // 默认随机种子是系统时间
Scanner sc = new Scanner(System.in);
int toGuess = random.nextInt(100);
while (true) {
System.out.println("请输入要输入的数字: (1-100)");
int num = sc.nextInt();
if (num < toGuess) {
System.out.println("低了");
} else if (num > toGuess) {
System.out.println("高了");
} else {
System.out.println("猜对了");
break;
}
}
sc.close();
}
运行结果:
这只是简易版的猜数字游戏,你还可以用 switch 语句去设置一个菜单选项控制游戏的开始等等功能,去美化你的游戏