OJ系统的常见输入输出问题——Java语言描述

本文介绍了在在线判题系统(OJ)中,使用Java处理输入输出时遇到的常见问题。针对字符数量的不同情况,如字符较少、指定读取行数以及字符数量较多的场景,提供了详细的解决方案。例如,当每行第一个字符指示后续字符数量时,如何正确读取并计算总和。


对于输入,主要用到Scanner的方法,包括: Scanner.hasnext()等判断是否有下一个字符;
Scanner.next()Scanner.nextInt()获取下一个字符(token);
Scanner.nextLine()将扫描往前进一行,并将跳过的这一行输入返回;
记得导入包 import java.util.Scanner;

分别读取每行中每个字符

1. 字符较少

实例
输入
1 5
10 20

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a+b);
        }
    }
}

2 指定读取行数

实例
输入
2
1 5
10 20

基本同上,只是在循环前单独获取行数参数。后面的循环可以用for(行数固定),也可以用while。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a+b);
        }
    }
}

3 字符数量较多

3.1 每行第一个字符表示后面字符的数量

示例

输入
4 1 2 3 4
5 1 2 3 4 5
输出
10
15

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int n = in.nextInt();
            if(n == 0){
                break;
            }else{
                int sum = 0;
                for(int i=0; i<n; i++){
                    sum += in.nextInt();
                }
                System.out.println(sum);
            }
        }
    }
}

3.2 每行字符数量不等

输入
1 2 3
4 5
0 0 0 0 0
输出
6
9
0

用正则将整行分割保存,可以用char[],也可以用String[]。
再遍历字符数组求和,记得类型转换。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextLine()){
            String[] str = in.nextLine().split(" ");
            int sum = 0;
            for(int i=0; i<str.length; i++){
                sum += Integer.valueOf(str[i]);
            }
            System.out.println(sum);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值