在Java学习中,处理数值计算、用户输入和循环逻辑是基础且重要的内容。本文围绕数字翻转、成绩统计、金额结算等实用场景,解析多个经典案例,帮助初学者掌握变量操作、循环控制和输入处理的核心方法。
一、数字翻转:如何将整数"倒过来"
数字翻转是常见的编程练习,例如将12345翻转成54321。其核心思路是拆解数字的每一位,再按相反顺序重组。
案例1:固定位数的数字翻转
java
public class NumberReverser {
public static void main(String[] args) {
int a = 12345; // 原始数字
int reversed = 0; // 存储翻转结果
// 拆解每一位数字(以5位数为例)
int digit1 = a / 10000; // 万位:12345 / 10000 = 1
int digit2 = a / 1000 % 10; // 千位:12345 / 1000 = 12,12 % 10 = 2
int digit3 = a / 100 % 10; // 百位:12345 / 100 = 123,123 % 10 = 3
int digit4 = a / 10 % 10; // 十位:12345 / 10 = 1234,1234 % 10 = 4
int digit5 = a % 10; // 个位:12345 % 10 = 5
// 重组为翻转后的数字
reversed = digit5 * 10000 + digit4 * 1000 + digit3 * 100 + digit2 * 10 + digit1;
System.out.println("翻转结果:" + reversed); // 输出:54321
}
}
解析:
- 对于固定位数的数字(如本例的5位数),可通过除法(
/
)和取余(%
)操作拆解每一位。 - 万位=数字/10000,千位=(数字/1000)%10,以此类推,最后按"个位×10000 + 十位×1000 + ..."的顺序重组。
- 局限性:仅适用于已知位数的数字,若数字位数不固定,需用循环实现通用解法(例如通过
while
循环反复取余获取个位,再累加)。
二、成绩统计:求和与平均数的两种解法
计算多个学生的成绩总和与平均数是典型的输入处理案例,以下两种解法分别通过不同的循环控制方式实现。
解法一:以学生序号为循环条件
java
package a1;
import java.util.Scanner;
public class ScoreCalculator1 {
public static void main(String[] args) {
System.out.println("请输入学生的数目");
Scanner scanner = new Scanner(System.in);
int studentCount = scanner.nextInt(); // 接收学生总数
double sum = 0; // 总成绩
int current = 1; // 当前录入的学生序号
if (studentCount > 0) {
// 循环录入每个学生的成绩(以序号是否小于等于总数为条件)
while (current <= studentCount) {
System.out.println("请输入第" + current + "个学生的成绩");
int score = scanner.nextInt();
System.out.println("第" + current + "个学生的成绩为" + score);
sum += score; // 累加成绩
current++; // 序号递增
}
// 计算并打印结果
double average = sum / (current - 1); // current最后多增1,需减1
System.out.println((current - 1) + "个学生的成绩和为" + sum);
System.out.println((current - 1) + "个学生的平均成绩为" + average);
} else {
System.out.println("学生的数目不能为负数");
}
}
}
解法二:以剩余学生数为循环条件
java
package a1;
import java.util.Scanner;
public class ScoreCalculator2 {
public static void main(String[] args) {
System.out.println("请输入学生的数目");
Scanner scanner = new Scanner(System.in);
int remaining = scanner.nextInt(); // 剩余未录入成绩的学生数
double sum = 0; // 总成绩
int current = 1; // 当前录入的学生序号
if (remaining > 0) {
// 循环录入每个学生的成绩(以剩余数量是否大于0为条件)
while (remaining > 0) {
System.out.println("请输入第" + current + "个学生的成绩");
int score = scanner.nextInt();
System.out.println("第" + current + "个学生的成绩为" + score);
sum += score; // 累加成绩
remaining--; // 剩余数量递减
current++; // 序号递增
}
// 计算并打印结果
double average = sum / (current - 1);
System.out.println((current - 1) + "个学生的成绩和为" + sum);
System.out.println((current - 1) + "个学生的平均成绩为" + average);
} else {
System.out.println("学生的数目不能为负数");
}
}
}
两种解法对比:
解法一(序号控制) | 解法二(剩余数控制) |
---|---|
用current <= studentCount 控制循环 |
用remaining > 0 控制循环 |
需额外维护current 变量记录序号 |
直接通过remaining 递减控制次数 |
逻辑更贴近"按序号录入"的自然思维 | 代码更简洁,减少变量依赖 |
通用技巧:
- 输入前判断数量是否为正数(
if (count > 0)
),避免无效计算。 - 平均数计算时注意除数为学生总数(
current - 1
,因循环结束后current
多增1)。
三、扩展案例:金额结算与累加求和
案例2:固定数量的成绩录入
java
package a1;
import java.util.Scanner;
public class FixedScoreInput {
public static void main(String[] args) {
int i = 1; // 学生序号
int sum = 0; // 总成绩
// 固定录入5个学生的成绩
while (i <= 5) {
System.out.println("请输入第" + i + "个学生的成绩");
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
sum += score; // 累加成绩
i++;
}
System.out.println(i - 1 + "个学生的成绩和为" + sum); // 输出:5个学生的成绩和为xxx
}
}
解析:
- 无需用户输入学生数量,直接通过
i <= 5
控制循环次数,适合已知数量的场景。
案例3:商品金额结算
java
package a1;
import java.util.Scanner;
public class ProductPriceCalculator {
public static void main(String[] args) {
System.out.println("请输入需要结算金额的顾客数目");
Scanner scanner = new Scanner(System.in);
int customerCount = scanner.nextInt();
double total = 0; // 总金额
int current = 1; // 当前顾客序号
if (customerCount > 0) {
while (customerCount > 0) {
System.out.println("请输入第" + current + "个商品的金额");
int price = scanner.nextInt();
System.out.println("第" + current + "个商品的金额为" + price);
total += price;
customerCount--;
current++;
}
double average = total / (current - 1);
System.out.println((current - 1) + "个商品总金额为" + total);
System.out.println((current - 1) + "个商品的平均金额为" + average);
} else {
System.out.println("数目要大于0");
}
}
}
解析:
- 与成绩统计逻辑类似,仅将"学生成绩"替换为"商品金额",体现代码逻辑的可复用性。
案例4:累加奇数直到和超过500
java
package a1;
public class OddNumberSum {
public static void main(String[] args) {
int i = 1; // 起始数字
int sum = 0; // 累加和
// 循环累加奇数,直到和超过500
while (sum <= 500) {
if (i % 2 == 1) { // 只累加奇数
sum += i;
System.out.println("数字为" + i + "时,和为" + sum);
}
i++;
}
System.out.println("累加和超过500时的最后一个奇数是:" + (i - 1));
}
}
解析:
- 用
i % 2 == 1
判断奇数,仅对奇数进行累加。 - 循环条件为
sum <= 500
,当和超过500时退出,最后输出的i - 1
为最后一个参与累加的奇数。
四、单位换算小知识:1.2公里=1200米
在编程中处理距离、长度等数据时,单位换算很常见。例如:
- 1公里(km)= 1000米(m),因此1.2公里 = 1.2 × 1000 = 1200米。
- 换算逻辑可通过代码实现:
double meters = kilometers * 1000;
在涉及实际场景的编程(如计算行程时间)时,需注意单位统一,避免因单位混淆导致结果错误。
总结:从案例中提炼编程思维
本文案例虽简单,但涵盖了Java编程的核心技能:
- 变量操作:通过算术运算拆解和重组数字(如数字翻转)。
- 循环控制 :用
while
循环实现次数控制(序号、剩余数)和条件控制(累加和限制)。 - 输入处理 :用
Scanner
接收用户输入,结合条件判断(if
)处理无效值。
初学者可尝试修改案例中的参数(如数字位数、学生数量、累加条件),观察结果变化,逐步培养"问题拆解→逻辑实现→代码优化"的思维习惯。编程能力的提升,就藏在这些基础练习的细节里。