Java | PTA练习:jmu-Java-01入门-格式化输入输出与字符串

题目要求:

###本题主要考察

  • 使用Scanner处理输入
  • 使用System.out.printf进行格式化输出
  • String常用方法与字符串常用操作

main

###输入说明:

  • 输入double,然后输入3个浮点数。输出:从左到右依次输出3个double(均保留2位小数输出,宽度为5),格式依次为:右侧填充空格,左侧填充空格,直接输出
  • 输入int,然后输入3个整数(以1个或多个空格分隔)。输出:将3个整数相加后输出。
  • 输入str,然后输入3个字符串。输出:去除空格,然后倒序输出3个字符。
  • 输入line,然后输入一行字符串。输出:转换成大写后输出。
  • 如果输入不是上面几个关键词,输出:**输出other**。

###输出说明 choice=你输入选项
该选项对应的输出内容

###提示

  1. 可使用line.split("\\s+");将以1个或多个空格分隔开的字符串分割并放入字符串数组。
  2. Scanner.nextLine与Scanner的其他next函数混用有可能出错。

输入样例:

double
1.578 3.0 3.14259
line
aaaaaaaaaa
int
1      2    3
str
321 654 987
line
dddddddddd
end

输出样例:

choice=double
1.58 , 3.00,3.14
choice=line
AAAAAAAAAA
choice=int
6
choice=str
987654321
choice=line
DDDDDDDDDD
choice=end
other

代码示例:

import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner in = new Scanner(System.in);
        String str;
        while(true){
            str = in.nextLine();
            if(str.compareTo("double")==0){
                double d[] = new double[3];
                for(int i=0;i<3;i++){
                    d[i] = in.nextDouble();
                }
                System.out.printf("choice=%s\n",str);
                System.out.printf("%-5.2f,%5.2f,%.2f\n",d[0],d[1],d[2]);
                in.nextLine();
            }
            else if(str.compareTo("line")==0){
                String l = in.nextLine();
                System.out.printf("choice=%s\n",str);
                System.out.println(l.toUpperCase());
            }
            else if(str.equals("str")){
                String digit;
                digit=in.next();
                digit=in.next()+digit;
                digit=in.next()+digit;
                System.out.printf("choice=%s\n",str);
                System.out.println(digit);
                in.nextLine();
            }
            else if(str.compareTo("int")==0){
                int sum=0;
                for(int i=0;i<3;i++){
                    int d = in.nextInt();
                    sum+=d;
                }
                System.out.printf("choice=%s\n",str);
                System.out.println(sum);
                in.nextLine();
            }
            else{
                System.out.printf("choice=%s\n",str);
                System.out.println("other");
            }
        }
    }
}

代码重点:

1、为什么有些情况下代码块的结尾有in.nextLine(),有些情况下没有?

考虑到,nextDouble类似的不以回车结尾的输入函数与nextLine()混用的时候,就得加in,nextLine()取消回车影响。

2、为什么下面1代码不行,2代码行?明明示例都是对的。

所有考例中有可能空串或者长空格字符串的情况。

nextLine().split(" ")与next()的区别

next()

next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。比如,在控制台输入“  gjm  gjm ”时,一次next()读入进来的仅仅是"gjm"。它不能得到带空格的字符串的!

nextLine()

nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符。比如,在控制台输入“  gjm  gjm ”时,一次nextLine()读入进来的结果是"  gjm  gjm "。它是可以得到带空格的字符串的!

1:nextLine().split(" ")

String s[] = in.nextLine().split(" ");

输入:1 2   4
输出:21

2:next()

digit=in.next();
digit=in.next()+digit;
digit=in.next()+digit;

输入:1 2   4
输出:421

代码展示:

            //1不能过
            else if(str.compareTo("str")==0){
                 String s[] = in.nextLine().split(" ");
                 System.out.printf("choice=%s\n",str);
                 for(int i=2;i>=0;i--){
                     if(i==0){
                         System.out.printf("%s\n",s[i]);
                     }
                     else{
                         System.out.print(s[i]);
                     }
                 }
            }

            //2能过
            else if(str.equals("str")){
                String digit;
                digit=in.next();
                digit=in.next()+digit;
                digit=in.next()+digit;
                System.out.printf("choice=%s\n",str);
                System.out.println(digit);
                in.nextLine();
            }

你可能感兴趣的:(Java,java,算法)