在编程题中,面对不同的输入,我们需要使用不同的技巧来接收这些数据,下面的10例题,我相信,一定可以撬开阁下的脑子,我们是不会亏待你的()
1.

A+B(1)
计算a+b

数据范围: 数据组数 1≤�≤100

1≤t≤100  , 
数据大小满足 1≤�≤1000
1≤n≤1000 
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
输出描述:
输出a+b的结果
示例1
输入例子:
1 5
10 20
输出例子:
6
30
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            System.out.println(a + b);
        }
    }
}

没什么好说的,第一题抛转引玉,下面的题目里,我们最需要注意的是Scanner类中的hasNext和
hasNextLine的区别
next() 与 nextLine()
next():

1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
nextLine():

1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。


综合以上两个方法的特点,第一题中我们使用的while判断中使用hasNext(),否则接收到空白后继续运行却没了输入,系统就会报错:
image.png

输入描述:
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
输出描述:
输出a+b的结果
示例1
输入例子:
2
1 5
10 20
输出例子:
6
30

这组输入给了测试用例中组数,并告知每组只有2个数字,那么只需先接收组数,循环接收各组即可

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        for (int i = 0; i < n; i++) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a + b);
        }
    }
}
输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
输出描述:
输出a+b的结果
示例1
输入例子:
1 5
10 20
0 0
输出例子:
6
30

第三组数据每组仍为2个数字,只是要循环输入多组,使用0,0结束输入,基本思路与2类似,只需要额为增加一组判断即可.

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            if (a == 0 & b == 0) {
                break;
            } else {
                System.out.println(a + b);

            }
        }
    }
}

4.

输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
示例1
输入例子:
4 1 2 3 4
5 1 2 3 4 5
0
输出例子:
10
15

第四组的结束与3类似,用一组判断即可,在接收每组数据时,先接收第一个数字,然后使用循环依次接收即可.

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

        }
    }

}

5.

输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
示例1
输入例子:
2
4 1 2 3 4
5 1 2 3 4 5
输出例子:
10
15

第五题给了行数,给了每组数据的个数,很简单,用2重循环即可.

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n1, n2, sum;
        n1 = in.nextInt();
        for (int i = 0; i < n1; i++) {
            sum=0;
            n2 = in.nextInt();
            for (int j = 0; j < n2; j++ ){
                sum+=in.nextInt();
            }
            System.out.println(sum);
        }

    }
}

6.

输入描述:
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
示例1
输入例子:
4 1 2 3 4
5 1 2 3 4 5
输出例子:
10
15

第六题不再给出有多少组数据,需要我们使用hasNext()来接收至最后一个数字,在while(hasNext)下接收首数字n,使用for循环进行n次,接受每个数字相加即可.

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int n,sum;
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            n = in.nextInt();
            sum=0;
            for(int i=0;i<n;i++){
                sum+=in.nextInt();
            }
            System.out.println(sum);
        }
    }
}

7.

输入描述:
输入数据有多组, 每行表示一组输入数据。

每行不定有n个整数,空格隔开。(1 <= n <= 100)。
输出描述:
每组数据输出求和的结果
示例1
输入例子:
1 2 3
4 5
0 0 0 0 0
输出例子:
6
9
0

这次的题目中出现了0,如果之前的题目使用0和空来判断的,就会出现问题,但是我们使用hasNext来判断,就避免了这些问题.同时,本题开始,不再给出每组数据的个数,那么我们如何判断每组数据的结束就成为了难点.看了提交大佬的答案,获得了思路,我们直接使用scanner.nextLine(),将一整行的数字以字符串的形式赋值给str,然后将str用空格分隔,赋值给字符串数组.

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in  = new Scanner(System.in);
        // ArrayList<Integer> list =  new ArrayList<>();
        while (in.hasNextLine()) {
            int sum = 0;
            //点睛之笔
            for (String s : in.nextLine().split(" ")) {
                sum += Integer.valueOf(s);
            }System.out.println(sum);
        }
    }
}

8.

输入有两行,第一行n

第二行是n个字符串,字符串之间用空格隔开
输出描述:
输出一行排序后的字符串,空格隔开,无结尾空格
示例1
输入例子:
5
c d a bb e
输出例子:
a bb c d e

第8题开始,进行到对字符串的排序,在接收每组字符串上,我们仍是用第7题的方法,使用scanner.nextLine()将整行都赋值出去,再用split(" ")以空格拆分,赋值给字符串数组,
也可以赋值给ArrayList<Integer>数组,
感谢java语言的高级,我们可以直接使用Arrays.sort(str),对字符串数组str进行排序,
也可以使用ArrayList.sort(Comparator.naturalOrder())来对ArrayList内进行自然排序.
当ArrayList.toString()后,结果里有[]和逗号,我们还需要用replace来替换掉这些符号才行.

import java.util.*;
public class Main {
    public static void main(String[] args){
        int n;
        Scanner in = new Scanner(System.in);
        n = in.nextInt();

        ArrayList<String> list3 = new ArrayList<>(); 
        for(int i = 0; i<n; i++){
            list3.add(in.next());
        }
        list3.sort(Comparator.naturalOrder());
        System.out.println(list3.toString().replace("[","").replace("]","").replace(",",""));
    }
}

9.

输入描述:
多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100
输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
示例1
输入例子:
a c bb
f dddd
nowcoder
输出例子:
a bb c
dddd f
nowcoder

第9题中,不再给出每组字符的个数,因此仍然需要使用NextLine()将整行赋值出去,再用split分隔后赋值给另一个数组.

import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str = "";

        // ArrayList<String> list = new ArrayList<>();

        while(in.hasNextLine()){
            str = in.nextLine();
            String[] str2 = new String[100];
            str2 = str.split(" ");
            Arrays.sort(str2);
            for(int i=0;i<str2.length;i++){
                System.out.print(str2[i]+" ");
                if(i==str2.length-1){
                   System.out.print('\n'); 
                }
            }
            str = "";
        }
    }
}

10.

输入描述:
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100
输出描述:
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格
示例1
输入例子:
a,c,bb
f,dddd
nowcoder
输出例子:
a,bb,c
dddd,f
nowcoder

第10题的接收数据,排序数据和第九题一样,但是最后的输出需要增加判断,由于以逗号分隔,故未结尾时打印逗号,结尾时打印'\n'即可.

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = "";
        while (in.hasNextLine()) {
            String[] str2 =  new String[100];
            str = in.nextLine();
            str2 = str.split(",");
            Arrays.sort(str2);
            for(int i=0;i<str2.length;i++){
                System.out.print(str2[i]);
                if(i==str2.length-1){
                    System.out.print('\n');
                }else{
                    System.out.print(',');
                }
            }
        }
    }
}

奇天大郑
70 声望10 粉丝