Java输入相关的内容

今天做笔试,ACM模式,因为很久没有做acm模式了(一直在leetcode上做核心代码模式),所以导致输入不太会写,结果可想而知,关键题目都挺简单。

Scanner库 (java.util.Scanner)

Scanner主要用来做java的键盘输入和显示器的输出

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 主要方法
        String str1 = sc.next();		// 返回下一个字符串,到空格或回车结束
        String str2 = sc.nextLine();	// 返回下一行字符串(包括空格),到回车结束
        int a1 = sc.nextInt();			// 返回下一个int数字
        long l1 = sc.nextLong();		// 返回下一个long数字
        
        // hasXXX方法,只会返回true或阻塞,不会返回false,与以上方法对应
        sc.hasNext();				// 是否有下一个字符串
        sc.hasNextLine();			// 是否有下一行
        sc.hasNextInt();			// 是否有下一个int数字
        sc.hasNextLong();			// 是否有下一个long数字
    }
}

一些需要注意的问题

hasNextLine()和 nextXXX()的组合使用

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 注意这段代码在本地不会结束,因为while循环内不会返回false,
        // 而在线平台因为使用了重定向(将调试代码放入文件中)所以可以跳出
        while(sc.hasNextLine) {
        	int n = sc.nextInt();
            int sum = 0;
            for(int i = 0; i < n; i++) {
                sum += sc.nextInt();
            }
            System.out.println(sum);
        }
    }
}

以上循环在牛客的acm模式下会报错,如果把while循环中的hasNextLine改为hasNextInt()就不会报错了。所以尽量少使用hasNextLine(),必须使用时搭配nextLine()来拿数据

这里我的理解是hasNextLine()通过/n来进行判断,而最后一行会自动添加一个/n,这样在最后一行进行while判断时会多出一次循环,而这个循环会导致拿不到String,Integer等数据,所以会报数组越界
nextLine()会跳过一个/n,然后去拿来一行数据,到下一个/n之前截止
nextInt()等方法因为是要拿数字,在判断时会自动跳过 /n,但是当拿完数据时光标不变,所以之后还有一个/n

重定向

上面提到了使用重定向可以跳出while循环,因为是通过文件来引入测试数据,这样文件读取完毕就可以结束程序运行

// 重定向从文件读入测试数据,可以跳出hasNext()的while循环
FileInputStream fis=new FileInputStream("test.txt");
System.setIn(fis);
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
    System.out.println(sc.nextLine());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值