1. 单个输入与单行输入

输入一个数,或者一个字符串,或者一行数中间用空格隔开:

  • 输入一个数
import java.util.Scanner;
Scanner sc = new Scanner(System.in);int i = sc.nextInt();

byte/ double/ float/ int/ long/ short 类型的类似。

  • 输入一个字符串
    next()、nextLine()都可以:
    不过要注意 
    next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;
    nextLine()吸取字符前后的空格/Tab键,回车键截止。
String str1 = sc.next(); //接收第1个值
String str2 = sc.nextLine(); //接收的是一整行

对于相同的输入: asdad sad ka
str1:asdad
str2: asdad sad ka

  • 输入一个char类型字符
    Scanner本身并不支持获取char类型的数据,但是可以通过charAt()方法截取string的首位来获取char类型的数据。
char c = scanner.next().charAt(0);
  • 输入一行数据or字符串,中间用空格隔开
    对于不同数据类型的方法都类似,连续用几次next()或者nextInt()函数:
 String a = sc.next();// 接收第1个值String b = sc.next();// 接收第2个值String c = sc.next();// 接收第3个值

输入:anny tony bani
输出:a:anny b:tony c:bani

2. 多行输入(最常见)

  • 给出了矩阵的行列数,用for遍历

第一行是两个用空格隔开的正整数n与m,n为行数,m为列数。
接下来的n行,每行是m个用空格隔开的正整数。如:
2 3
5 6 8
1 6 9
想要用二维数组接收:

//用二维数组接收:
int m = sc.nextInt();
int n = sc.nextInt();
int[][] nums = new int[m][n];
for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {nums[i][j] = sc.nextInt();}
}//验证接收是否正确:
for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {System.out.print(nums[i][j] + " "); //分隔号一定要用双引号隔开}System.out.println();
}

注意在验证的时候,分隔号一定要用双引号隔开,单引号字符会参与计算!!

  • 没有给出具体的行列数,用hasNextLine()判断

有些输入可能是:
输入一个矩阵,每行以空格分隔。
1 2 3
56 8 2 9
对于这种没有给定矩阵行列数的输入,我们只能按照字符串拆分来进行。

public class test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<List<Integer>> list = new ArrayList<>();while (sc.hasNextLine()) { //每行都是一个List数组List<Integer> line = new ArrayList<>();String str = sc.nextLine();String[] arr = str.split(" ");for (String s : arr) {line.add(Integer.valueOf(s));}list.add(line);}System.out.println(list); //[[1, 2, 3], [56, 8, 2, 9]]}
}
  • 输入数组中带有中括号和逗号

有些输入可能是,输入一个矩阵:
[[3,2,3],
[1,6,5],
[7,8,9]]
对于这种没有给定矩阵行列数的输入,而且还包含中括号和逗号的输入,我们也是只能按照字符串拆分来进行。这里逗号和右中括号是关键。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<List<Integer>> list = new ArrayList<>();while (sc.hasNextLine()) { //每行都是一个List数组List<Integer> line = new ArrayList<>();String str = sc.nextLine();String[] arr = str.replace("[","").replace("]","").replace("],","").replace(" ","").split(","); //只要改这里就可以,加几个replace()for (String s : arr) {line.add(Integer.valueOf(s));}list.add(line);}System.out.println(list); //[[3, 2, 3], [1, 6, 5], [7, 8, 9]]}
}

3. 解析逗号分隔符的字符串

输入用逗号分隔的字符串: 1,5,9,6,5,7,2
想要接收后变成int类型数组:

String str = sc.next();
String[] arr = str.split(","); //通过分隔符将其转为字符串数组
int[] nums = new int[arr.length];
for (int i = 0; i < nums.length; i++) {nums[i] = Integer.parseInt(arr[i]); //将字符串转为int
}

这里提一下parseInt()valueOf()的区别:
Integer.parseInt(str)返回值是int型的;
Integer.valueOf(str)返回值是Integer型的。

4. 输出写法

System.out.println();//换行打印,输出之后会自动换行
System.out.print();//不换行打印
System.out.printf();//按格式输出

对于printf

/*** 输出字符串 ***/
// %s表示输出字符串,也就是将后面的字符串替换模式中的%s
System.out.printf("%s", new Integer(1212));
// %n表示换行
System.out.printf("%s%n", "end line");
// 还可以支持多个参数
System.out.printf("%s = %s%n", "Name", "Zhangsan");
// %S将字符串以大写形式输出
System.out.printf("%S = %s%n", "Name", "Zhangsan");/*** 输出整数类型***/
Integer iObj = 342;
// %d表示将整数格式化为10进制整数
System.out.printf("%d; %d; %d%n", -500, 2343L, iObj);
// %o表示将整数格式化为8进制整数
System.out.printf("%o; %o; %o%n", -500, 2343L, iObj);
// %x表示将整数格式化为16进制整数
System.out.printf("%x; %x; %x%n", -500, 2343L, iObj);
// %X表示将整数格式化为16进制整数,并且字母变成大写形式
System.out.printf("%X; %X; %X%n", -500, 2343L, iObj);/*** 输出浮点类型***/
Double dObj = 45.6d;
// %f表示以十进制格式化输出浮点数
System.out.printf("%f; %f; %f%n", -756.403f, 7464.232641d, dObj);
// 还可以限制小数点后的位数
System.out.printf("%.1f; %.3f; %f%n", -756.403f, 7464.232641d, dObj);

5. 注意点

  • 多组测试数据:
    如果出现多组测试数据放在一起的情况,直接在最外层套while(sc.hasNext()),每组测试数据进入一次while循环,运行一次主函数。一直等待输入,除非终止程序。
  • 高精度:
    BigInteger和BigDecimal可以说是acmer选择java的首要原因。
    函数:add, subtract, divide, mod, compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf()。
  • 一个非常容易出错的地方:(nextInt转nextLine接收)

假设输入为:
3
a 10 1 2
b 10 2
c 10 3
第一行是是数字n,表示下面有n行输入,下面的n行有字母,也有数字,字母只是标识符,不参与运算,数字的个数不固定,每一行的数字需要用List存储下来,最后将每一行的List放入一个大的List中。

错误代码:

import java.util.Scanner;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); //需要在后面添加sc.nextLine();换到下一行List<List<Integer>> adj = new ArrayList<>();for (int i = 0; i < n; i++) {List<Integer> list = new ArrayList<>();String[] inputs = sc.nextLine().split(" ");for (int j = 1; j < inputs.length; j++) {list.add(Integer.valueOf(inputs[j]));}adj.add(list);}}
}

后果:adj的第一个元素是一个空ArrayList,输入的最后一组数据没有接收到。
原因:当执行int n = sc.nextInt();后,光标还停留在第一行,下面就直接执行sc.nextLine()来接收输入了,这样接收的只是第一行n后面的空字符串!
解决方法:在int n = sc.nextInt();后添加sc.nextLine();直接换行

  • 赛码平台注意点:
    不要自定义包名称,否则会报错,即不要添加package answer之类的语句;
    写很多个类,但是必须有一个类名为Main,并且为public属性,并且Main为唯一的public class;
    Main类的里面必须包含一个名字为’main’的静态方法(函数),这个方法是程序的入口。

ACM模式下输入输出写法 Java版本相关推荐

  1. 使用Javascript在Leetcode中的ACM模式下无法获取输入数据的问题

    今天做了一道字节的题目,是字节自己出的新题,没有任何题解,且只能使用 ACM 模式,代码编辑区一片空白.然而当我想获取自定义的输入数据时,却获取不到.本人前端一枚,平时做题都是使用 JS 写算法,所以 ...

  2. [JS]在ACM模式下获取输入

    输入输出处理 核心代码模式处理 不需要处理任何输入输出,直接返回值即可. ACM 模式 你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出: while (line = readline( ...

  3. python3 ACM模式的输入输出例子教学

    Python的输入是字符串,所以要自己转类型 strip去掉左右两端的空白符,返回str slipt把字符串按空白符拆开,返回[str] map把list里面的值映射到指定类型,返回[type] EO ...

  4. 牛客网笔试系统ACM模式下的程序输入格式总结

    Java提供两种方式进行键盘的输入, BufferedReader 和 Scanner 一.用BufferedReader进行输入 提供的方法有: readLine(); // 以enter为结束标志 ...

  5. 【赛码网 牛客网】笔试 --> 输入输出写法 python版本

    2020秋招陆续开始了... 找研发岗工作的学生党也陆续开始做各大公司的笔试题了... 然而曾经在力扣牛客等网站刷题时,我从未考虑过代码的输入与输出问题... 在首次笔试遇到白板题,代码写对了,但是输 ...

  6. ACM模式python输入输出

    一.多行等长输入 题目描述: 计算a+b 输入描述: 输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组. 输出描述: 输出a+b的结果 示例: 输入: 1 ...

  7. Android平台dalvik模式下java Hook框架ddi的分析(1)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/75710411 一.前 言 在前面的博客中已经学习了作者crmulliner编写的, ...

  8. ART模式下基于Xposed Hook开发脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...

  9. 解决 Virtual PC 在 XP PAE模式下无法运行的问题

    在xp下装了Virtual PC 运行是出现如下提示: Virtual PC 在PAE模式下无法运行 此版本的Virtual PC无法在PAE(物理地址扩展)模式下运行.请恢复到正常状态下来运行Vir ...

最新文章

  1. 2019年牛客多校第1场 赛后总结
  2. Windows 编程[12] - 菜单与菜单资源(一)
  3. 产品经理面试中那些不忍直视的奇葩题目,面试官你真是够了!
  4. .NET分布式缓存Redis从入门到实战
  5. .NET 和 JAVA
  6. Java Applet 授权命令
  7. 免费PR模板 20个Premiere简单标题文字动画PR模板
  8. 快速排序C语言代码+辅助图+注释
  9. C语言 哲学家就餐问题
  10. 杂记之关于视频、音频编/解码
  11. 51单片机,485,测试03/05/06
  12. day2-requests和bs4
  13. 第23章 向碧蓝的苍穹致敬——三维天空的构建
  14. 使用 maven 打包 src/test/java下的文件,并用 java jar 跑打包出来的jar
  15. mysql导入sas文件夹_SAS建立本地文件夹
  16. Windows 上帝模式「完全控制面板」的介绍和使用
  17. Tomecat端口8005被占用解决方法
  18. elementui中树结构el-tree和树结构过滤
  19. 实习、校招面试的一点经验
  20. 环信SDK调用实现即时聊天功能

热门文章

  1. ​【原创】基于SSM的学院排课管理系统(排课管理系统毕业设计源代码)
  2. 网易云信语音短信验证码图解
  3. [Flex] 组件Tree系列 —— 运用openItems获取打开节点
  4. 调节图片里的字体颜色或者背景颜色——PS通道混合使用
  5. 第九章结构体变量实验报告
  6. spike sorting
  7. 用python画六瓣雪花剪纸折法_窗花的剪制方法(六瓣花、雪花) 来充电吧
  8. 【代码高亮】解决代码高亮工具复制在word中左边留有空白
  9. Python学习图谱(持续更新)最新:2021/11/08
  10. AE基础动画参数之制作跳动音符