运行程序后可以输入4个选项,分别为:fib,sort,search,getBirthDate

fib:根据输入n,打印斐波那契数列。比如输入:3,输出:1 1 2

sort:输入一串数字,然后进行排序并输出,注意数组元素输出的格式为使用[ ]包括。提示:可直接使用函数Arrays相关方法处理输出。

search:如果找到返回所找到的位置,如果没找到,返回-1。提示: 可以先对数组排序,然后使用Arrays相关函数进行查找。

getBirthDate:输入n个身份证,然后把输入的n个身份号的年月日抽取出来,按年-月-日格式输出。

当输入不是这几个字符串(fib,sort,search,getBirthDate)的时候,显示exit并退出程序。

注意: 在处理输入的时候,尽量只使用Scanner的nextLine()方法接收输入,不要将nextLine()与其它next方法混用,否则可能会出现行尾回车换行未处理影响下次输入的情况。

参考:jdk文档的Arrays,String

输入格式:

fib
3
sort
-1 10 3 2 5
search
-1
search
0
getBirthDate
1
330226196605054190
e

输出格式:

1 1 2
[-1, 2, 3, 5, 10]
0
-1
1966-05-05
exit

代码如下:

import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static int fib(int n)
    {
        if(n==1||n==2)
        {
            return 1;
        }else
        {
            return fib(n-1)+fib(n-2);
        }
    }
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int[] array=new int[0];
        while(true)
        {
            String choice=sc.nextLine().trim();//除去空格
            switch(choice)
            {
                case "fib":
                    int n=Integer.parseInt(sc.nextLine().trim());
                    StringBuilder fibResult = new StringBuilder();
                    for(int i=1;i<=n;i++)
                    {
                        if(i>1){
                            fibResult.append(" ");
                        }
                        fibResult.append(fib(i));
                    }
                    System.out.println(fibResult);
                    break;
                case "sort":
                    String input=sc.nextLine().trim();
                    String[] strArray=input.split("\\s+");
                    int[] tempArray=new int[strArray.length];
                    for(int i=0;i<strArray.length;i++)
                    {
                        tempArray[i]=Integer.parseInt(strArray[i]);
                    }
                    array=tempArray;
                    Arrays.sort(array);
                    System.out.println(Arrays.toString(array));
                    break;
                case "search":
                    int num=Integer.parseInt(sc.nextLine().trim());
                    if(array.length==0)
                    {
                        System.out.println(-1);
                        break;
                    }
                    int index=Arrays.binarySearch(array,num);
                    System.out.println(index>=0?index:-1);
                    break;
                case "getBirthDate":
                    int a=Integer.parseInt(sc.nextLine().trim());
                    while(a>0){
                        String s=sc.nextLine();
                        System.out.println(s.substring(6,10)+"-"+s.substring(10,12)+"-"+s.substring(12,14));
                        a--;
                    }
                    break;
                default:
                    System.out.println("exit");
                    sc.close();
                    System.exit(0);
                    break;
            }
        }
    }
}

我的测试样例是对的,但是一直过不了测试点3,有人知道是哪里出了错误吗,,

学习记录:

1、trim() : Java 中 String 类的一个常用方法,核心作用是去除字符串首尾的空白字符,并返回处理后的新字符串。

语法格式:

String 处理后的字符串 = 原字符串.trim();

2、StringBuilder :因为 Java 中的 String 是不可变的,每次拼接都会创建新的字符串对象,而StringBuilder 会在原有对象上直接修改内容,不会创建大量临时对象,效率更高,尤其适合循环中拼接字符串的场景。

3、append() :StringBuilder(以及 StringBuffer)类的核心方法,作用是把指定内容拼接到对象的后面。

语法格式:

StringBuilder 对象名.append(要追加的内容);

4、Integer.parseInt(...):Integer 类的静态方法,作用是将 “字符串形式的数字” 解析为对应的 int 类型整数。

5、s.substring(开始索引, 结束索引) :是 Java 中 String 类的核心方法,作用是从原字符串 s 中截取一部分内容,返回一个新的字符串。

语法格式:

String 截取后的字符串 = 原字符串.substring(int beginIndex, int endIndex);

6、里面定义的是方法,调用时必须加括号数组没有方法,只有一个唯一的属性 length(用于获取数组的元素个数),访问时直接用 数组名.length,不加括号

更多推荐