2.1 jmu-Java-02基本语法-01-综合小测验 (9 分)

2.1 jmu-Java-02基本语法-01-综合小测验 (9 分)

运行程序后可以输入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.Arrays;
import java.util.Scanner;

public class Main {
	//全局的数组
	static int[] nums;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNextLine())
		{
			String choice = sc.nextLine();
			//System.out.println("##"+choice+"##");
			switch (choice) {
			case "fib":
				fib(sc);
				break;
			case "sort":
				nums = sort(sc);
				break;
			case "search":
				search(sc,nums);
				break;
			case "getBirthDate":
				getBirthDate(sc);
				break;
			default:
				System.out.println("exit");
				System.exit(0);
				break;
			}
		}
		sc.close();
	}
	
	private static void getBirthDate(Scanner sc) {
		String nstr = sc.nextLine();
		int n = Integer.parseInt(nstr);
		for (int i = 0; i < n; i++) {
			String id = sc.nextLine();
			System.out.println(id.substring(6, 10)+"-"+id.substring(10, 12)+"-"+id.substring(12, 14));
		}
	}
	private static void search(Scanner sc,int[] nums) {
		//System.out.println(Arrays.toString(nums));
		String numbstr = sc.nextLine();
		int numb = Integer.parseInt(numbstr);
		int index = Arrays.binarySearch(nums, numb);
		//System.out.println("##"+index+"##");
		if(index >= 0)
		{
			System.out.println(index);
		}
		else
		{
			System.out.println("-1");
		}
	}
	private static int[] sort(Scanner sc) {
		String line = sc.nextLine();
		//String[] numbers = line.split(" ");
		String[] numbers = line.split("\\s+");//正则表达式
		int[] nums = new int [numbers.length];
		for(int i = 0;i < nums.length;i++) {
			nums[i] = Integer.parseInt(numbers[i]);
		}
		Arrays.sort(nums);//数组类方法。
		System.out.println(Arrays.toString(nums));
		//最后要返回生成好的数组。
		return nums;
	}
	private static void fib(Scanner sc) {
		String nstr = sc.nextLine();
		int n = Integer.parseInt(nstr);
		int first_numb = 1;
		int second_numb = 1;
		for(int i = 1;i <= n;i++)
		{
			if(i == 1) {
				System.out.print(first_numb);
			}
			else if(i == 2) {
				System.out.print(" "+ second_numb);
			}
			else if(i >= 3){
				int temp = first_numb + second_numb;
				first_numb = second_numb;
				second_numb = temp;
				System.out.print(" "+ temp);
			}
		}
		System.out.println();
	}
}

学到的知识要点:

    • 在处理输入的时候,尽量只使用Scanner的nextLine()方法接收输入,不要将nextLine()与其它next方法混用,否则可能会出现行尾回车换行未处理影响下次输入的情况。
    • 所以在Java中使用Scanner读入数据的一个比较重要的要点是,尽量所有的数据都先用nextLine()读入进来,然后再去根据自己需要的数据类型去转换。
    • 另一种方法是,如果使用其他的nextxxx方法的时候,要记得在后面继续补充一个用来吸收行尾换行的输入
    • 可以使用String.subString()来取子串。
    • 可以用String.split("\\s+")来处理用空格隔开的字符串。
    • 可以使用Integer.parseInt()将字符串转化成具体的int数值
    • 可以使用Arrays.toString()把数组以字符串的形式按一定格式输出。
    • 可以使用Arrays.binarySearch(nums, numb)通过二分搜索查找数组中是否存在某一个元素。

你可能感兴趣的:(Java,java,正则表达式)