Java - for循环,嵌套循环,一些循环结构的练习,跳转语句break和continue
c) for 循环
while、do...while:一般用在循环次数不固定的情况,结构松散;
for:用在循环次数固定的情况,结构紧密。
语法
for(循环变量初始化;循环条件;循环变量迭代) {
循环体;
}
流程图
1.循环变量初始化 -> 2.循环条件 -> 3.循环体语句 -> 4.循环变量迭代 -> 重复2,3,4
案例
package demo;
import java.util.Scanner;
public class Test03 {
//编写一个main方法
public static void main(String[] args) {
//循环输入某同学结业考试的5门课成绩,并计算平均分
Scanner input = new Scanner(System.in);
double sum = 0;//定义变量sum,用来求和
for(int i = 1; i <= 5; i++){
//定义变量 score 接收用户输入成绩
System.out.print("输入第" + i + "门课程的成绩:");
double score = input.nextDouble();
sum += score;
}
double avgScore = sum / 5; //定义变量 avgScore ,用来计算平均分
System.out.println("这5门课程的平均分是:" + avgScore);
}
}
注意
; 号必须写
循环四要素不一定非得写在 () 中
嵌套for循环
双层循环:在一个循环,再嵌套另一个循环
外层循环一次,内层循环一遍
案例:用*打印5×5的矩形
for (int i = 1; i <= 5; i++){
//打印5个*
for (int j = 1; j <= 5; j++){
System.out.print("*");
}
//换行
System.out.println();
打印直角三角形:
for (int i = 1; i <= 5; i++){
//外层每次循环,内层循环次数会随 i 改变而改变,需要观察内层循环条件是怎样发生改变的
for(int j = 1; j <= 2 * i - 1; j++){
System.out.print("*");
}
//换行
System.out.println();
}
4.4、跳转语句
2)、break
当break出现在循环语句中,作用是跳出当前循环语句,结束当前循环执行后面的代码
在switch ...case 语句中,break 表示跳出当前选择结构
案例
当变量x的值为3时,使用break语句跳出循环。
int x = 1;
while (x <= 4) {
System.out.println("x = " + x);
if (x == 3) {
break; //跳出循环
}
x++;
}
打印结果只到了 x = 3;并没有出现"x = 4"
练习
循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负数,停止录入并提示录入错误,且不再显示平均分
import java.util.Scanner;
public class Test05 {
//编写一个main方法
public static void main(String[] args) {
//循环录入某学生5门课的成绩并计算平均分,
//如果某分数录入为负数,停止录入并提示录入错误,且不再显示平均分
Scanner input = new Scanner(System.in);
double sumScore = 0;
boolean flag = true;
for(int i = 1; i <= 5; i++ ){
//定义一个score变量接收用户输入的成绩
System.out.print("请输入第" + i + "门课的成绩:");
double score = input.nextDouble();
sumScore += score;
//判断
if(score < 0){
System.out.println("录入错误");
flag = false;
break;
}
}
if (flag){
double avgScore = sumScore / 5;
System.out.println("五门课平均分:" + avgScore);
}
}
}
此题中需要让 break 语句执行时跳出循环,并且不输出平均分了。
思考:平均分的输出在 for 循环外面,break 并不能终止循环外面的语句
解决:定义一个 boolean变量 标记,执行break前把这个布尔值改为false,平均分的输出用 if 选择语句,判断条件就是这个布尔变量
3)、continue
continue语句只能用在循环语句中,它的作用是结束本次循环,继续执行下一次循环。(跳过)
案例
求1~100的奇数和
//用continue跳过偶数
int sum = 0; // 定义变量sum,用于记住和
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) { // i是一个偶数,不累加
continue; // 结束本次循环
}
sum += i; // 实现sum和i的累加
}
System.out.println("sum = " + sum);
4.5、综合练习
使用while循环,求n的阶乘,n由控制台自行输入
package homework;
import java.util.Scanner;
public class Topic01 {
//编写一个main方法
public static void main(String[] args) {
//使用while循环,求n的阶乘,n由控制台自行输入
Scanner input = new Scanner(System.in);
String answer = "y";
while (answer.equals("y")){
System.out.print("输入你想求阶乘的整数:");
int n = input.nextInt(),result = 1;
int i = 1;
while (i <= n){
result *= i;
i++;
}
System.out.println(n + "的阶乘为:" + result);
System.out.print("你还想求别的数的阶乘吗(y/n)?");
answer = input.next();
}
}
}
输入行数打印出空心菱形
package demo;
import java.util.Scanner;
public class Practice01 {
//打印一个main方法
public static void main(String[] args) {
//输入行数打印出空心菱形
Scanner input = new Scanner(System.in);
String res = "y";
while(res.equals("y")){
System.out.println("请输入行数(奇数):");
int num = input.nextInt(), onNum = (num + 1) / 2;
//循环打印
for (int i = 1; i <= onNum; i++) {
//打印空格
for (int j = onNum - 1; j >= i; j--) {
System.out.print(" ");
}
System.out.print("*");
//打印 *
for (int c = 2; c < 2 * i - 1; c++) {
System.out.print(" ");
}
if (i > 1) {
System.out.print("*");
}
//换行
System.out.println();
}
//下半部
//5行
//空格:j=1,j<i,j++;*:9,7,5,3,1.c=9.c>=2i-1.c--
for (int i = 1; i <= onNum - 1; i++) {
//打印空格
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
System.out.print("*");
//打印 *
for (int c = (onNum - 2) * 2 - 1; c >= 2 * i - 1; c--) {
System.out.print(" ");
}
if (i < onNum - 1) {
System.out.print("*");
}
//换行
System.out.println();
}
System.out.print("是否继续玩玩?(y/n):");
res = input.next();
}
}
}
求这样一个三位数,该三位数等于其每位数字的阶乘之和(145=1!+4!+5!)
//求这样一个三位数,该三位数等于其每位数字的阶乘之和145=1!+4!+5!
//100~999,
for (int i = 100; i <= 999; i++){
int a,b,c,x = 1,y = 1,z = 1; //定义百位,十位,各位,百位阶乘,十位阶乘,个位阶乘
//求出百位,十位,个位数字
a = i / 100;
b = i / 10 % 10;
c = i % 10;
//求百位阶乘
for (int j = 1; j <= a;j++){
x *= j;
}
//求十位阶乘,0的阶乘为0
if (b != 0){
for (int j = 1; j <= b;j++){
y *= j;
}
}else {
y = 0;
}
//求个位阶乘,0的阶乘为0
if (c != 0){
for (int j = 1; j <= c;j++){
z *= j;
}
}else {
z = 0;
}
//判断是否满足该三位数等于其每位数字的阶乘之和
if (i == x + y + z){
System.out.println(i);
}
}
输出打印100-1000之间所有的水仙花数,要求每行输出2个,并统计一共有多少个
//输出打印100-1000之间所有的水仙花数,要求每行输出2个,并统计一共有多少个
int count = 0,number = 0,a,b,c,sum;
for (int i = 100; i < 1000; i++){
a = i / 100;
b = i / 10 % 10;
c = i % 10;
sum = a * a * a + b * b * b + c * c * c;
if (i == sum){
count++;
number++;
System.out.print(i + "\t");
if (number %2 == 0){
System.out.println();
}
}
}
System.out.println("\n100~999之间一共有" + count + "个水仙花数");
按需求完成指定功能,题目如下:
模拟登录,给三次机会,并提示还有几次机会
- 假设用户名和密码均为admin,如果输入正确,控制台输出:欢迎admin登录
- 如果输入错误,控制台输出:录入错误,您还有2次机会(最多有3次机会)
package homework;
import java.util.Scanner;
public class Topic10 {
//编写一个main方法
public static void main(String[] args) {
//模拟登录,给三次机会,并提示还有几次机会
//1.假设用户名和密码均为admin,如果输入正确,控制台输出:欢迎admin登录
//2.如果输入错误,控制台输出:录入错误,您还有2次机会(最多有3次机会)
//创建变量接收用户输入
Scanner input = new Scanner(System.in);
int countUsername = 3; //用户名初始输入机会为3
boolean flag = true; //标记
for (int i = 1; i <= 3; i++){
System.out.print("请输入用户名:");
String userName = input.next();
countUsername--; //每输入一次,机会减 1
if (!userName.equals("admin")){
System.out.println("用户名录入错误,您还有" + countUsername + "次机会");
if (countUsername > 0){ //判断是否还有机会
continue; //有机会开始下一次输入
}else {
break; //没机会就终止输入
}
}else {
int countPwd = 3;
for (int j = 0; j <= 3; j++){
System.out.print("请输入密码:");
String pwd = input.next();
countPwd--;
if (!pwd.equals("admin")){
System.out.println("密码录入错误,您还有" + countPwd + "次机会");
if (countPwd > 0){ //判断是否还有机会
continue; //有机会开始下一次输入
}else {
flag = false;
break; //没机会就终止输入
}
}
}
}
}
if (flag == false){
return;
}
}
}
按需求完成指定功能,题目如下:
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
例如键盘录入:ABCDEabcd123456!@#$%^;
输出ABCDEabcd123456!@#$%^中大写字母有:5个,小写字母有:4个,数字字符:6个,其他字符有:6个
package homework;
import java.util.Scanner;
public class Topic11 {
//编写一个main方法
public static void main(String[] args) {
//键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
// 例如键盘录入:ABCDEabcd123456!@#$%^
// 输出:ABCDEabcd123456!@#$%^中大写字母有:5个,小写字母有:4个,数字字符:6个,其他字符:6个
//创建变量接收用户输入
Scanner input = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = input.next();
int bigCount = 0,smallCount = 0,figureCount = 0,otherCount = 0;//定义各种字符的个数
//遍历 str 的每一个字符
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i); //根据每一个字符的角标来依次显示各个字符
int num = (int) ch; //定义一个整数型变量number,用强转来显示字符所对应的 ASCll 码
if (num >= 65 && num <= 90){ //A-Z对应的 ASCLL 码为 65-90
bigCount++;
}else if (num >= 97 && num <= 122){ //a-z 对应的 ASCLL 码为 97-122
smallCount++;
}else if (num >= 48 && num <= 57) { //数字 0-9 对应的 ASCLL 码为 48-57
figureCount++;
}else {
otherCount++;
}
}
System.out.println(str + "中大写字母有:" + bigCount + "个,小写字母有:" + smallCount +
"个,数字字符有:" + figureCount + "个,其他字符有:" + otherCount + "个");
}
}
本文来自博客园,作者:Thecong,转载请注明原文链接:https://www.cnblogs.com/hwphwc/p/16456553.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!