挺好:
- package com.itheima.grup;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- /**
- *
- * @author 喜爱
- * 将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。
- * 要求:用户输入一个整数(0到9)数组(数组长度大于等于3,小于10),那么请在控制台打印出该数组中所有成员的排列组合。
- * 详细代码+测试结果才可获得满分。
- */
- public class DataGrupDemo {
- public static void main(String[] args) {
- noticeWord(1,null);
- String line = inputData();
- line = verifyStr(line);
- noticeWord(3,line);
- String[] str = line.split(",");
- noticeWord(4,"您输入的" + str.length +"个数据,最终排列组合有:");
- sortGrup(str,0,str.length - 1);
- }
- /**
- * 排序组合方法
- * @param str 组合数组
- * @param start 开始位置
- * @param end 结束位置
- */
- private static void sortGrup(String[] str, int start, int end) {
- if (start == end) {
- // 当只要求对数组中一个数字进行全排列时,只要就按该数组输出即可
- for (int i = 0; i <= end; i++) {
- System.out.print(str[i] + " ");
- }
- System.out.println();
- } else {
- // 多个数字全排列
- for (int i = start; i <= end; i++) {
- // 交换数组第一个元素与后续的元素
- String temp = str[start];
- str[start] = str[i];
- str[i] = temp;
- // 后续元素递归全排列
- sortGrup(str, start + 1, end);
- // 将交换后的数组还原
- temp = str[start];
- str[start] = str[i];
- str[i] = temp;
- }
- }
- }
- /**
- * 校验数据的组合
- * @param line 输入的数据
- * @return String
- */
- private static String verifyStr(String line){
- //当然输入的是为空 时候,打印提示信息,要求重新输入
- while(line == null || "".equals(line)){
- noticeWord(2,null);
- noticeWord(1,null);
- line = inputData();
- }
-
- //对数据的数据进行校验,检查输入的内容是否是整数
- String[] str = line.split(",");
- String regex = "[0-9]+";
- for (String string : str) {
- if(!string.matches(regex)){
- noticeWord(2,null);
- noticeWord(1,null);
- line = inputData();
- line = verifyStr(line);
- break;
- }
- }
- //判断输入的数据的个,确保输入的数据个数在[3,10)之间
- if(str.length < 3 || str.length >= 10){
- noticeWord(2,null);
- noticeWord(1,null);
- line = inputData();
- line = verifyStr(line);
- }
- //最终返回数据
- return line;
- }
- /**
- * 接收输入数据的方法
- * @return String
- */
- private static String inputData() {
- BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
- String line = null;
- try {
- line = bufferReader.readLine();
- } catch (IOException e) {
- throw new RuntimeException("读取数据失败。。。");
- }
- return line;
- }
-
- /**
- * 提示信息的方法
- * @param index
- * @param temp
- */
- private static void noticeWord(int index,String temp){
- switch (index) {
- case 1:
- System.out.println("请输入一组整数数据,要求数据的个数大于等于3个,小于10个,数据之间使用 ','(逗号使用英文状态下的符号,输完请回车):");
- break;
- case 2:
- System.out.println("您输入有误,请重新输入!");
- break;
- case 3:
- System.out.println("您输入的一组数据是:" + temp);
- break;
- case 4:
- System.out.println(temp);
- break;
- }
- }
- }
复制代码 |