Java编程案例:从数字翻转到成绩统计的实用技巧

在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)处理无效值。

初学者可尝试修改案例中的参数(如数字位数、学生数量、累加条件),观察结果变化,逐步培养"问题拆解→逻辑实现→代码优化"的思维习惯。编程能力的提升,就藏在这些基础练习的细节里。

相关推荐
iOS开发上架哦5 分钟前
移动端网页调试实战,键盘弹出与视口错位问题的定位与优化
后端
百度Geek说9 分钟前
PaddleMIX推出扩散模型推理加速Fast-Diffusers:自研蒸馏加速方法FLUX-Lightning实现4步图像生成
后端
gopher_looklook17 分钟前
Go并发实战:singleflight 源码解读与二次封装
数据结构·后端·go
用户8338102512225 分钟前
我为什么做PmMock:让接口设计不再头疼
前端·后端
二闹32 分钟前
IService 和 BaseMapper:CRUD 操作的选择指南
后端
dylan_QAQ33 分钟前
【附录】Spring AOP 基础知识及应用
后端·spring
Java中文社群1 小时前
抱歉!Java面试标准答案最不重要
java·后端·面试
jiguanghover1 小时前
n8n 创建多维表格犯的错误
前端·后端
dylan_QAQ1 小时前
【附录】Spring 配置属性绑定 基础及应用
后端·spring
泡海椒1 小时前
jquick Path:让JSON数据处理像呼吸一样简单
后端