数字
- 如果是读取 Long,则使用:
in.hasNextLong()
和Long a = in.nextLong()
; - 读取小数:
f = scan.nextFloat()
或double weight = scan.nextDouble()
;
A.多组空格分隔的两个正整数⭐
介绍
无限输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组;
1 5
10 20
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNextInt()) {
int a = in.nextInt();
int b = in.nextInt();
int ans = func(a, b);
System.out.println(ans);
}
}
private static int func(int a, int b) {
return a+b;
}
public static void main(String[] args) {
inOut();
}
}
B.第一行组数接空格分隔的两个正整数⭐
介绍
第一行输入数据个数,后面输入数据;
2
1 5
10 20
代码
import java.util.Scanner;
public class Main{
private static void inOut() {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
for(int i = 0; i < n; i++){
int a = in.nextInt();
int b = in.nextInt();
int ans = func(a, b);
System.out.println(ans);
}
}
private static int func(int a, int b) {
return a+b;
}
public static void main(String[] args) {
inOut();
}
}
C.空格分隔的两个正整数为0 0 结束
介绍
输入包括两个正整数a,b(1 <= a, b <= 10^9), 如果输入为0 0则结束输入;
1 5 10 20 0 0
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNextInt()) {
int a = in.nextInt();
int b = in.nextInt();
if(a == 0 && b == 0) break;
int ans = func(a, b);
System.out.println(ans);
}
}
private static int func(int a, int b) {
return a+b;
}
public static void main(String[] args) {
inOut();
}
}
D,多组数据, 每组第一个整数为组的大小, 组大小为0是结束
介绍
链接:https://ac.nowcoder.com/acm/contest/5657/D
来源:牛客网输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
4 1 2 3 4
5 1 2 3 4 5
0
代码
import java.util.Scanner;
public class Main{
public static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNextInt()) {
int n = in.nextInt();
if(n == 0) break;
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = in.nextInt();
}
int ans = func(nums);
System.out.println(ans);
}
}
public static int func(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
public static void main(String[] args) {
inOut();
}
}
E 第一行为组数, 每组第一个数为组内大小
介绍
链接:https://ac.nowcoder.com/acm/contest/5657/E
来源:牛客网输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
2
4 1 2 3 4
5 1 2 3 4 5
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
int count = in.nextInt();
for(int i = 0; i < count; i++) {
int n = in.nextInt();
int[] nums = new int[n];
for(int j = 0; j < n; j++) {
nums[j] = in.nextInt(); //思想, 这里的下标为j
}
int ans = func(nums);
System.out.println(ans);
}
}
private static int func(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
public static void main(String[] args) {
inOut();
}
}
F 数行, 每行第一个数为组内大小
介绍
链接:https://ac.nowcoder.com/acm/contest/5657/F
来源:牛客网输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
4 1 2 3 4
5 1 2 3 4 5
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNextInt()) {
int n = in.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = in.nextInt();
}
int ans = func(nums);
System.out.println(ans);
}
}
private static int func(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
public static void main(String[] args) {
inOut();
}
}
G 数行, 每行有若干个整数
介绍
链接:https://ac.nowcoder.com/acm/contest/5657/G
来源:牛客网输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,空格隔开。(1 <= n <= 100)。
1 2 3
4 5
0 0 0 0 0
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
String[] numsStrArr = in.nextLine().split(" ");
int n = numsStrArr.length;
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = Integer.valueOf(numsStrArr[i]);
}
int ans = func(nums);
System.out.println(ans);
}
}
private static int func(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
public static void main(String[] args) {
inOut();
}
}
字符串
比较项 | next( ) | nextLine( ) |
---|---|---|
说明 | 只能读取到空格之前的字符串 | 可以读取空格的字符串 |
比如“你好 java” | “你好” | “你好 java” |
使用前判断 | in.hasNext() | in.hasNextLine() |
A.首行为字符个数, 第二行为空格分隔的字符:s
介绍
输入有两行,第一行n 第二行是n个字符串,字符串之间用空格隔开
5
c d a bb e
代码
import java.util.*;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] data = new String[n];
for(int i = 0; i < n; i++) {
data[i] = in.next();
}
String ans = func(data);
System.out.print(ans);
}
private static String func(String[] data) {
Arrays.sort(data);
String ans = "";
for(int i = 0; i < data.length; i++) {
if(i == data.length-1) ans += data[i];
else ans += data[i] + " ";
}
return ans;
}
public static void main(String[] args) {
inOut();
}
}
B. 若干行用空格分隔的字符
介绍
多个测试用例,每个测试用例一行。 每行通过空格隔开,有n个字符,n<100
a c bb
f dddd
nowcoder
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNextLine()) {
String[] data = in.nextLine().split(" ");
String ans = func(data);
System.out.println(ans);
}
}
private static String func(String[] data) {
return "";
}
public static void main(String[] args) {
inOut();
}
}
C. 若干行用逗号分隔的字符
介绍
多个测试用例,每个测试用例一行。 每行通过,隔开,有n个字符,n<100
a,c,bb
f,dddd
nowcoder
代码
import java.util.Scanner;
public class Main {
private static void inOut() {
Scanner in = new Scanner(System.in);
while(in.hasNextLine()) {
String[] data = in.nextLine().split(",");
String ans = func(data);
System.out.println(ans);
}
}
private static String func(String[] data) {
return "";
}
public static void main(String[] args) {
inOut();
}
}
链表
A. 构造一个链表
介绍
输入的是链表的头结点
代码
import java.util.Scanner;
public class Main {
static class ListNode{
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
private static void inOut() {
//构造
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] data = new int[n];
for(int i = 0; i < n; i++) {
data[i] = in.nextInt();
}
ListNode head = n == 0 ? null : new ListNode(data[0]);
ListNode p = head;
for(int i = 1; i < n; i++) {
p.next = new ListNode(data[i]);
p = p.next;
}
//调用
ListNode ans = func(head);
//输出
while(ans != null) {
System.out.println(ans.val);
ans = ans.next;
}
}
private static ListNode func(ListNode head) {
return head;
}
public static void main(String[] args) {
inOut();
}
}
树
有null的空字符串构造树
代码
import java.util.Scanner;
import java.util.*;
public class Main {
static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public static String serialize(TreeNode root) {
return serializeHelp(root, "");
}
private static String serializeHelp(TreeNode root, String str) {
if(root == null) {
return str+"null,";
}
String temp = str + root.val+",";
String temp2 = serializeHelp(root.left, temp);
String temp3 = serializeHelp(root.right, temp2);
return temp3;
}
// Decodes your encoded data to tree.
public static TreeNode deserialize(String data) {
String[] dataArr = data.split(",");
Queue<String> que = new LinkedList<>();
for(String item : dataArr) {
que.offer(item);
}
return deserializeHelp(que);
}
private static TreeNode deserializeHelp(Queue<String> que) {
String val = que.poll();
if(val.equals("null") ) { //其实当que的长度恰好构建出一棵树, 前面的null判断就不会被用到
return null;
}
TreeNode root = new TreeNode(Integer.valueOf(val));
root.left = deserializeHelp(que);
root.right = deserializeHelp(que);
return root;
}
private static void inOut() {
Scanner in = new Scanner(System.in);
}
private static void func() {
}
public static void main(String[] args) {
inOut();
}
}
输出格式化
- 输出有两种方式:String str=String.format(示例) 或 **System.out.printf(示例)**;
- 向上取整用:**Math.ceil(1.01),向下取整用:Math.floor(1.01)**;
转换符
转换符 | 说明 | 示例 | 输出 |
---|---|---|---|
%s | 字符串 | “Hi,%s:%s.%s”, “王南”,“王力”,“王张” | Hi,王南:王力.王张 |
%c | 字符 | “字母a的大写是:%c %n”, ‘A’ | 字母a的大写是:A |
%b | 布尔 | “3>7的结果是:%b %n”, 3>7 | 3>7的结果是:false |
%d | 整数(十进制) | “100的一半是:%d %n”, 100/2 | 100的一半是:50 |
%x | 整数(十六进制) | “100的16进制数是:%x %n”, 100 | 100的16进制数是:64 |
%o | 整数(八进制) | “100的8进制数是:%o %n”, 100 | 100的8进制数是:144 |
%f | 浮点 | “50元的书打8.5折扣是:%f 元%n”, 50*0.85 | 50元的书打8.5折扣是:42.500000 元 |
%a | 浮点(十六进制) | “上面价格的16进制数是:%a %n”, 50*0.85 | 上面价格的16进制数是:0x1.54p5 |
%e | 指数 | “上面价格的指数表示:%e %n”, 50*0.85 | 上面价格的指数表示:4.250000e+01 |
%g | 通用浮点(f和e类型中较短的) | “上面价格的指数和浮点数结果的长度较短的是:%g %n”, 50*0.85 | 上面价格的指数和浮点数结果的长度较短的是:42.5000 |
%h | 散列码 | “字母A的散列码是:%h %n”, ‘A’ | 字母A的散列码是:41 |
%% | 百分比 | “上面的折扣是%d%% %n”, 85 | 上面的折扣是85% |
%n | 换行符 | ||
%tx | 日期与时间 |
3.2 搭配转换符的标志
标志 | 说明 | 示例 | 输出 |
---|---|---|---|
. | 后接保留多少位小数(四舍五入) | (“%.2f”,3.555) | 3.56 |
+ | 为正数或者负数添加符号 | (“%+d”,15) | +15 |
− | 左对齐 | (“%-5d”,15) | |15 | |
0 | 数字前面补0 | (“%04d”, 99) | 0099 |
空格 | 在整数之前添加指定数量的空格 | (“% 4d”, 99) | | 99| |
, | 以“,”对数字分组 | (“%,f”, 9999.99) | 9,999.990000 |
( | 使用括号包含负数 | (“%(f”, -99.99) | (99.990000) |
# | 如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 | (“%#x”, 99) (“%#o”, 99) | 0x63 0143 |
< | 格式化前一个转换符所描述的参数 | (“%f和<3.2f”, 99.45) | 99.450000和99.45 |
$ | 被格式化的参数索引 | (“%1$d,%2$s”, 99,“abc”) | 99,abc |
欢迎在评论区中进行批评指正,转载请注明来源,如涉及侵权,请联系作者删除。