Java输入输出(做题常用介绍)

比较

BufferedReader 与 Scanner

BufferedReader 与 Scanner 都是 Java 用于从标准输入流(比如键盘输入)中读取数据的类,但它们之间有一些区别。
BufferedReader:

  • BufferedReader 是基于字符的输入流,它可以逐行读取字符数据。通常搭配 InputStreamReader使用,将字节流转换为字符流。
  • 它提供了一种高效的方式来读取字符,特别是在需要逐行读取大量字符数据时。
  • BufferedReader 没有直接的方法来解析不同类型的数据(如整数、浮点数等),需要手动进行解析和转换。

Scanner:

  • Scanner 是一个方便的类,可以用于解析基本类型和字符串。它可以从输入流中提取不同类型的数据,如整数、浮点数、字符串等。
  • Scanner 不仅可以读取字符数据,还可以解析不同类型的数据,使得数据的处理更为方便。
  • 相较于 BufferedReader,Scanner 的功能更加强大,但在处理大量数据时可能会有一定性能损耗。

PrintWriter 和 System.out

PrintWriter 和 System.out 都可以用于向控制台输出数据,不过使用 PrintWriter 需手动关闭。

  • print():传递一个字符、字符串或其他类型的数据。
  • println():与print()类似,但会在写入数据后添加一个换行符。
  • printf():使用格式化字符串写入数据。

PrintWriter 手动关闭:

  • flush() :用于手动刷新输出流,确保数据被及时地写出。
  • close() :用于关闭输出流并释放相关资源。

Scanner

Scanner in = new Scanner(System.in);

next(): 读取并返回下一个单词(以空格分隔)。
nextInt(): 读取并返回下一个整数。
nextDouble(): 读取并返回下一个双精度浮点数。
nextLine(): 读取并返回一行输入。
hasNext(): 检查是否还有输入数据。
hasNextInt(): 检查下一个输入是否为整数。
hasNextDouble(): 检查下一个输入是否为双精度浮点数。

import java.util.Scanner;

public class InAndOut {
    public static void main(String[] args) {

        Scanner in  = new Scanner(System.in);

        System.out.println("========= int ============");

        System.out.printf("请输入一个int类型的数赋给 a: ");
        int a = in.nextInt();

        System.out.printf("请输入一个int类型的数赋给 b: ");
        int b = in.nextInt();

        int ab = a + b;
        System.out.println("a + b = " + ab);

        System.out.println("========= long ==========");

        System.out.printf("请输入一个long类型的数赋给 c: ");
        long c = in.nextLong();

        System.out.printf("请输入一个long类型的数赋给 d: ");
        long d = in.nextLong();

        long cd = c + d;
        System.out.println("c + d = " + cd);

        System.out.println("========= double ==========");

        System.out.printf("请输入一个double类型的数赋给 e: ");
        double e = in.nextDouble();
        System.out.printf("请输入一个double类型的数赋给 f: ");
        double f = in.nextDouble();

        double ef = e * f;
        System.out.println("e * f = " + ef);


        System.out.println("========= String ==========");
        in.nextLine(); // 消耗上一个换行符, 一般不需要,在控制台展示需要
        String s = in.nextLine(); //获取下一行的文本内容
        System.out.println("s 的内容:" + s);

        System.out.println("========= 多个数处理,以 int求和 示例 ==========");
        int ans = 0;
        while (in.hasNextInt()) { //下一个输入为 int就继续,在控制台输入其他内容可终止,自己调试可以这样做
            ans += in.nextInt();
        }
        System.out.println("多个int类型的数求和:" + ans);

        in.close();
    }
}

输出结果
在这里插入图片描述

BufferedReader

因为BufferedReader没有直接的方法来解析不同类型的数据,且是按行读取,在做输入输出的题目时会有一定的优势。我们可以按行读取字符串,再将字符串按" "(空格)分割成字符串数组,再将每个单独(不包含空格)的字符串转换我们所需的类型,如果你要处理的内容就是这一行字符串,那你就不需要分割,直接使用即可。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

readLine(): 读取一行文本并返回一个字符串,不包括行尾的换行符。如果已经到达流的末尾,则返回 null。

将字符串 s 转换为一些所需类型,前提是合法转换

int x = Integer.parseInt(s);
long y = Long.parseLong(s);
double z = Double.parseDouble(s);


示例

假设第一行给你一个数字 m,表示接下来有 m 行,每一行都有 两个数字(int示例),让你求和。
打印m行,打印形式:a + b = ? (?为 a 与 b 的和,括号里的内容不打印)

import java.io.*;

public class ReaderAndWriter {
    public static void main(String[] args) throws IOException {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

        int m = Integer.parseInt(in.readLine());

        for (int i = 0; i < m; i++) {
            String[] str = in.readLine().split(" ");
            int x = Integer.parseInt(str[0]);
            int y = Integer.parseInt(str[1]);
            int ans = x + y;
            out.println(x + " + " + y + " = " + ans);
        }
        out.flush();
        out.close();
        in.close();
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dnasZJ2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值