0
点赞
收藏
分享

微信扫一扫

「Java基本语法」标准输入和输出

Ad大成 06-27 21:00 阅读 16

引言

试想一下说话的场景,需要要听懂别人说的话(输入),也要能表达自己的想法(输出)。Java程序也需要这样的"对话能力",这就是标准输入输出。

标准输出 - 程序的"说话"方式

System.out就像程序的嘴巴,负责把信息"说"给出来。它有三种常用的说话方式,就像我们说话有不同的语气。

1. println:说完话换行

# 源文件保存为“Greeting.java”。
public class Greeting { 
    public static void main(String[] args) {
        System.out.println("早上好!");
        System.out.println("今天天气真不错");
    }
}

运行结果

早上好! 今天天气真不错!

println这就像正常的对话,说完一句就换行。输出结果会是两行文字,清晰易读。

2. print:说话不换行

# 源文件保存为“Calculator.java”。
public class Calculator {
    public static void main(String[] args) {
        int a = 5, b = 3;
        System.out.print(a + " + " + b + " = ");
        System.out.println(a + b);
    }
}

运行结果

5 + 3 = 8

print就像把几句话说在一起,适合需要拼接的输出。这段代码会输出"5 + 3 = 8",等号前后的话连在一起。

3. printf:格式化说话

# 源文件保存为“Temperature.java”。
public class Temperature {
    public static void main(String[] args) {
        double temp = 23.4567;
        System.out.printf("当前温度:%.2f摄氏度\n", temp);
        System.out.printf("时间:%02d:%02d", 9, 5);
    }
}

运行结果

当前温度:23.46摄氏度 时间:09:05

printf就像用模板说话,可以精确控制格式。"%.2f"表示保留两位小数,"%02d"表示两位数不足补零。输出会是"当前温度:23.46摄氏度"和"时间:09:05"。

标准输入 - 程序的"耳朵"

Scanner就好比程序的耳朵,用来"听"要输入的内容。使用前需要先"戴上耳朵"——导入java.util.Scanner包。

基础输入案例

# 源文件保存为“AgeChecker.java”。
import java.util.Scanner;

public class AgeChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入你的年龄:");
        int age = scanner.nextInt();
        
        if (age >= 18) {
            System.out.println("你已成年");
        } else {
            System.out.println("你还是未成年人");
        }
        
        scanner.close();  // 用完要摘下耳朵
    }
}

运行结果

请输入你的年龄:18 你已成年

这段代码会等待用户输入年龄,然后做出判断。注意最后要关闭Scanner,就像用完耳朵要摘下来一样。

混合输入

# 源文件保存为“PersonInfo.java”。
import java.util.Scanner;

public class PersonInfo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请输入你的信息:");
        System.out.print("姓名:");
        String name = scanner.nextLine();
        
        System.out.print("年龄:");
        int age = scanner.nextInt();
        
        scanner.nextLine();  // 清除缓冲区
        
        System.out.print("职业:");
        String job = scanner.nextLine();
        
        System.out.printf("\n%s,%d岁,职业是%s", name, age, job);
        scanner.close();
    }
}

运行结果

请输入你的信息: 姓名:张三 年龄:18 职业:学生

张三,18岁,职业是学生

这里有个关键点:在使用nextInt()后要用使用nextLine()清除缓冲区。就好像接电话时,听完一个信息要"嗯"一声确认,才能听下一个信息。

常见错误及解决方法

  1. Scanner忘记关闭:就像戴着耳机睡觉,虽然程序能运行,但资源没释放。解决方法是在使用完毕后调用scanner.close()

  2. 输入类型不匹配:比如要求输入数字却输入了文字。这会引发InputMismatchException异常。解决方法是用hasNextInt()等方法先检查:

    if (scanner.hasNextInt()) {
        int num = scanner.nextInt();
    } else {
        System.out.println("请输入数字!");
    }
    
  3. nextLine跳过输入:混合使用nextXXX()nextLine()时经常出现。原因是nextXXX()不会读取行尾的换行符。解决方法是在nextXXX()后加一个scanner.nextLine()清空缓冲区。

  4. 格式化字符串错误printf中使用错误的格式符会导致IllegalFormatConversionException。比如用%d输出浮点数。解决方法要确保格式符与数据类型匹配。

练习题

理论练习题

  1. 下面代码的输出结果是什么?

    System.out.print("Hello");
    System.out.println("World");
    System.out.print("Java");
    

    答案

    HelloWorld Java

    解析print不换行,println换行,因此前两句的输出连在一起,第三句输出时另起一行。

  2. 为什么有时候nextLine()会直接跳过不等待输入?如何解决? 答案:因为前面使用了nextInt()等没有读取行尾换行符。解决方法是在nextInt()等后加一个scanner.nextLine()清空缓冲区。

  3. 如果想要输出一个保留3位小数的浮点数,应该使用什么格式字符串? 答案"%.3f"。格式化字符串从百分号开始,f表示浮点数,.3表示三位小数。

  4. 如果用户在执行nextInt()时输入了字母,会发生什么?程序会如何表现? 答案:程序会抛出InputMismatchException异常并终止。就像问别人年龄,对方却回答"苹果"一样让人困惑。解决方法是用hasNextInt()先做检查,或者用nextLine()读取整行再用Integer.parseInt()转换。

  5. 下面两段代码的输出有什么不同?为什么?

    // 代码A
    System.out.print("温度:");
    System.out.println(36.5);
    
    // 代码B
    System.out.printf("温度:%.1f\n", 36.5);
    

    答案:输出看起来相同,都是"温度:36.5"。但代码B使用了格式化输出,能精确控制小数位数。就像手写数字和用印章盖章的区别,后者更加规范统一。

实操练习题

  1. BMI计算器: 编写程序输入身高(m)和体重(kg),计算并输出BMI值(体重/身高²),保留2位小数。

    # 源文件保存为“BMICalculator.java”。
    import java.util.Scanner;
    
    public class BMICalculator {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.print("请输入身高(米):");
            double height = scanner.nextDouble();
            
            System.out.print("请输入体重(公斤):");
            double weight = scanner.nextDouble();
            
            double bmi = weight / (height * height);
            System.out.printf("你的BMI值是:%.2f", bmi);
            
            scanner.close();
        }
    }
    

    运行结果

    请输入身高(米):1.7 请输入体重(公斤):75 你的BMI值是:25.95

  2. 购物小票打印: 编写程序输入商品名称、单价和数量,输出格式化的购物小票。

    # 源文件保存为“ReceiptPrinter.java”。
    import java.util.Scanner;
    
    public class ReceiptPrinter {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.print("商品名称:");
            String name = scanner.nextLine();
            
            System.out.print("单价:");
            double price = scanner.nextDouble();
            
            System.out.print("数量:");
            int quantity = scanner.nextInt();
            
            System.out.println("\n===== 购物小票 =====");
            System.out.printf("%-10s\t单价\t数量\t总价\n", "商品名称");
            System.out.printf("%-10s\t%.2f\t%d\t%.2f", 
                name, price, quantity, price * quantity);
            
            scanner.close();
        }
    }
    

    运行结果

    商品名称:洗发水 单价:20.8 数量:2

    ===== 购物小票 ===== 商品名称 单价 数量 总价 洗发水 20.80 2 41.60

  3. 用户注册验证: 编写程序要求用户输入用户名和密码,密码需要输入两次进行验证。

    # 源文件保存为“Registration.java”。
    import java.util.Scanner;
    
    public class Registration {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.print("设置用户名:");
            String username = scanner.nextLine();
            
            System.out.print("设置密码:");
            String password1 = scanner.nextLine();
            
            System.out.print("再次输入密码:");
            String password2 = scanner.nextLine();
            
            if (password1.equals(password2)) {
                System.out.println("注册成功!");
                System.out.println("用户名:" + username);
            } else {
                System.out.println("两次密码不一致!");
            }
            
            scanner.close();
        }
    }
    

    运行结果

    设置用户名:admin 设置密码:admin 再次输入密码:admin 注册成功! 用户名:admin

  4. 天气预报播报器: 编写程序输入城市名称、当前温度和天气状况,生成格式化的天气预报。

    # 源文件保存为“WeatherReport.java”。
    import java.util.Scanner;
    
    public class WeatherReport {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.print("城市:");
            String city = scanner.nextLine();
            
            System.out.print("当前温度(℃):");
            double temp = scanner.nextDouble();
            
            scanner.nextLine(); // 清除换行符
            System.out.print("天气状况(晴/雨/阴/雪):");
            String condition = scanner.nextLine();
            
            System.out.println("\n====== 天气预报 ======");
            System.out.printf("%s市今日天气:%s\n", city, condition);
            System.out.printf("当前气温:%.1f℃\n", temp);
            System.out.println("====== ====== ======");
            
            scanner.close();
        }
    }
    

    运行结果

    城市:三亚 当前温度(℃):37.6 天气状况(晴/雨/阴/雪):晴

    ====== 天气预报 ====== 三亚市今日天气:晴 当前气温:37.6℃ ====== ====== ======

  5. 图书信息管理系统: 编写程序输入图书信息,包括书名、作者、价格和库存量,然后以表格形式输出。

    # 源文件保存为“BookManagement.java”。
    import java.util.Scanner;
    
    public class BookManagement {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.print("书名:");
            String title = scanner.nextLine();
            
            System.out.print("作者:");
            String author = scanner.nextLine();
            
            System.out.print("价格:");
            double price = scanner.nextDouble();
            
            System.out.print("库存量:");
            int stock = scanner.nextInt();
            
            System.out.println("\n====== 图书信息 ======");
            System.out.printf("%-20s%-15s%-10s%-8s\n", "书名", "作者", "价格", "库存");
            System.out.printf("%-20s%-15s¥%-9.2f%-8d", 
                title, author, price, stock);
            
            scanner.close();
        }
    }
    

    运行结果

    书名:好诗不厌百回读 作者:袁行霈 价格:38 库存量:5

    ====== 图书信息 ====== 书名 作者 价格 库存
    好诗不厌百回读 袁行霈 ¥38.00 5

举报

相关推荐

0 条评论