重生之小比特头像
关注
【Java SE】Java输入输出封面图

【Java SE】Java输入输出

本节学习目标

  1. 熟练掌握控制台输出三种方式
  2. 熟练使用Scanner完成键盘输入
  3. 掌握 OJ 常见多组循环输入
  4. 综合练习:猜数字小游戏

1. 控制台输出

Java 控制台输出三个核心方法

System.out.println(msg);  //输出内容,自带换行
System.out.print(msg);    //输出内容,**不换行**
System.out.printf(format,参数); //格式化输出,用法类似C语言printf

代码示例

int x = 10;
System.out.println("hello world");
System.out.printf("x = %d\n", x);

常用格式化转换符

表格

转换符含义示例
%d十进制整数printf("%d",100) →100
%x十六进制整数printf("%x",100) →64
%o八进制整数printf("%o",100) →144
%f浮点数printf("%.2f",3.1415) →3.14
%e科学计数法输出浮点数printf("%e",100.0) →1.000000e+02
%s字符串printf("%s","Java") →Java
%c字符printf("%c",'A') →A
%b布尔值printf("%b",true) →true
%%输出百分号printf("%.2f%%", 0.29)0.29%

💡不用死记表格,写代码需要的时候查阅文档即可。

2. 键盘输入 Scanner

使用 Scanner 需要导包import java.util.Scanner;

2.1 基础输入示例

import java.util.Scanner;

public class TestInput {
    public static void main(String[] args) {
        // 创建Scanner对象,从标准键盘读取输入
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你的姓名:");
        String name = sc.nextLine(); //读取一整行字符串

        System.out.println("请输入你的年龄:");
        int age = sc.nextInt(); //读取int整数

        System.out.println("请输入你的工资:");
        float salary = sc.nextFloat(); //读取float浮点数

        System.out.println("你的信息如下:");
        System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);

        sc.close(); //用完记得关闭扫描器
    }
}

⚠️经典坑:nextInt() /nextFloat()之后接nextLine() nextInt()只会读取数字,会把回车换行符残留在输入缓冲区,后面的nextLine()直接读到空字符串。 解决办法:

  1. 数字读取完成后,调用一次sc.nextLine();吃掉残留换行;
  2. 或者全部使用nextLine()读取字符串再做类型转换。

2.2 多组输入(OJ 刷题高频)

sc.hasNextInt():判断下一个输入是不是 int,有输入返回 true,没有输入结束循环。

import java.util.Scanner;

public class TestMultiInput {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sum = 0;
        int count = 0;

        //不断读取整数,直到结束标记
        while (sc.hasNextInt()) {
            int tmp = sc.nextInt();
            sum += tmp;
            count++;
        }
        System.out.println("sum = " + sum);
        System.out.println("avg = " + (double)sum / count);
        sc.close();
    }
}

结束输入标记:

  • Windows CMD / IDEA 控制台:Ctrl + Z
  • Linux / Mac 终端:Ctrl + D 这个写法是在线 OJ 平台多组测试用例的标准写法。

3. 综合实战:猜数字游戏

游戏规则:

  1. 系统随机生成 1‑100 之间整数;
  2. 用户循环输入猜测数字;
  3. 提示高了 / 低了;猜对输出提示,结束游戏。

随机数类Random,导包:import java.util.Random; random.nextInt(100) → 生成范围 [0,99],想要 1‑100 需要 + 1。

完整可运行代码:

import java.util.Random;
import java.util.Scanner;

public class GuessGame {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
        //生成 [1,100]随机数字
        int toGuess = random.nextInt(100) + 1;
        //System.out.println("答案:" + toGuess); //调试打开看答案

        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();
    }
}

📝本篇核心考点总结

  1. 输出:println()带换行;print()不换行;printf()格式化输出,和 C 语法相似。
  2. Scanner使用前需要import java.util.Scanner;,创建对象Scanner sc = new Scanner(System.in);,用完sc.close()关闭。
  3. 方法区分:
    • nextInt()nextFloat():读取数字,不会吃掉末尾回车换行
    • nextLine()读取一整行(包含空格),容易读到残留空行。
  4. OJ 多组输入模板:while(sc.hasNextInt()){ ... };Windows 结束Ctrl+Z,Mac/Linux 结束Ctrl+D
  5. Random.nextInt(n)生成[0, n‑1]整数;要得到[1‑100]nextInt(100)+1

面试小问答 Q:sc.nextInt()之后调用sc.nextLine()为什么直接读到空字符串? A:nextInt()只读取数字,输入敲下的回车\n留在缓冲区;nextLine()读到这个换行直接返回空字符串。需要额外调用一次sc.nextLine()消费换行。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/wuqingyigexiaoba/article/details/164884857

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--