Java基础问题:输入一个数字获取对应范围及长度的所有不重复的数字,例如:输入3.则输出{123,132,213,231,321,312}

来源:互联网 发布:淘宝卖家火拼在哪里 编辑:程序博客网 时间:2024/06/05 03:42

输入一个数字获取对应范围及长度的所有不重复的数字,例如:输入3.则输出{123,132,213,231,321,312}

首先我们要理清楚解决问题的思路。
我们所需要获取的数字和所输入数字是什么关系?
如何来定义变量,并且赋值?
编写一个怎样的方法来获取我们所需要的数字?
废话不多说让我们来解决这些问题。
问题一:我们所需要获取的数字和所输入数字是什么关系?
根据问题我们可以获得的信息是:
1.输入3出现的每位数的取值范围就是1到3,所以判断出所需要获取的数字的取值范围。
2.输入3出现的每个数字都为三位数,所以判断出所需要获取的数字的位数。
3.每一位数字都是不同的。
问题二:如何来定义变量,并且赋值?
根据问题一的答案我们可以定义出两个变量
1.char [] valueRange 定义取值范围的数组,用来储存对应的取值范围。
2.char [] aimValue 定义目标值数组,用来存储获取到的每一个值。
3.通过重载构造方法来赋值。
问题三:编写一个怎样的方法来获取我们所需要的数字?
根据问题我们所能分析得出的思路是使用递归方法fibnacci()。
1.需要遍历valueRange数组来一个个填充进aimValue数组。
2.因为需要对aimValue数组添加元素,所以方法需要传入一个固定的下标值index来控制对应的aimValue的下标。
3.因为需要将valueRange的值赋值给aimValue中的元素所以使用for循环。
其他处理方法
根据问题需求我们还需要加入以下方法
1.处理每次获取到的数字每一位数都不重复的方法getStandard(char [] aimValue)。
2.将输入的数字转化为取值范围的方法disposeInteger(int i)。

以下是实现代码

import java.util.HashSet;public class OnlyNumber {    //存储取值范围    private char[] valueRange;    //存储目标字符串长度为字符串长度    private char[] aimValue;    //用来储存所有收集到的数字    private static HashSet<String> hs = new HashSet<String>();    /**     * 空构造函数     */    public OnlyNumber(){}    /**     * 构造函数初始化取值范围和目标字符串     * @param valueRange     */    public OnlyNumber(char[] valueRange)    {        this.valueRange = valueRange;        //设置目标数字的长度        this.aimValue = new char[valueRange.length];    }    public HashSet<String> getHs() {        return hs;    }    public void setHs(HashSet<String> hs) {        this.hs = hs;    }    /**     * 判断目标字符串是否重复     * @param aimValue     * @return     */    public boolean getStandard(char [] aimValue)    {        //定义一个HashSet来接收数值中数字        HashSet hs = new HashSet();        //循环添加        for (int i = 0; i < aimValue.length; i++) {            hs.add(aimValue[i]);        }        /**         * 判断char数组长度和Set集合大小是否相等。         * 原理:Set集合会过滤掉相同的数据。         */        if(aimValue.length==hs.size())        {            return true;        }        else        {            return false;        }    }    /**     * 通过递归算法获取所有能组成的字符串     * @param index     * @return     */    public void fibnacci(int index)    {        //遍历取值范围        for (int i = 0; i < valueRange.length; i++) {            //将valueRange的第i个值赋值给aimValue的第index的值            aimValue[index] = valueRange[i];            //判断valueRange是否还有空间接收值,如果有就递归。            if(index+1<aimValue.length)            {                fibnacci(index+1);            }            //判断每个数字是否符合规范            else if(getStandard(aimValue))            {                hs.add(String.valueOf(aimValue));            }        }    }    /**     * 处理输入的参数     * @param i     */    public void disposeInteger(int i) {        String str = "";        //将输入的参数转化为取值范围        for (int j = 1; j <= i; j++) {            str += j;        }        //实例化对象调用递归方法        new OnlyNumber(str.toCharArray()).fibnacci(0);    }    /**     * main函数     * @param args     */    public static void main(String[] args) {        OnlyNumber OnlyNumber = new OnlyNumber();        OnlyNumber.disposeInteger(3);        for (String string : OnlyNumber.getHs()) {            System.out.println(string);        }    }}

就是这样了会有很多不足的地方,需要改进的地方请补充。

日期:2017/8/27
时间:18:20

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 山药弄的身上痒怎么办 疣迪去除疣体怎么办 尖锐湿庞出血了怎么办 尿道口周围烂了怎么办 尖锐湿庞复发了怎么办 宝宝脸上长湿疹怎么办如何治疗 孕妇得尖锐湿庞怎么办 痘痘留下的小坑怎么办 花洒固定座坏了怎么办 脚上起水泡烂了怎么办 月经期吃了芒果怎么办 月经量少又黑怎么办 来月经黑色的血怎么办 月经来的是黑色怎么办 来月经有血块是怎么办 月经又少又黑怎么办 来月经发黑又少怎么办 月经血发黑量少怎么办 做人流后肚子胀怎么办 怀孕见红了肚子不痛怎么办 月经来是黑色的怎么办 怀孕了长了痔疮怎么办 怀孕了有外痔疮怎么办 孕妇长痔疮很痛怎么办 孕9个月尿路感染怎么办 旁边有人尿不出来怎么办 外阴破皮了应该怎么办 脸上长脂肪粒怎么办怎么能消除 挤黑头留下的坑怎么办 长痘留下的坑怎么办 鼻子上留下黑印怎么办 狗狗眼里长息肉怎么办 狗狗眼角长息肉怎么办 脸上长了好多脂肪粒怎么办 脸上毛孔粗大有黑头怎么办 脸颊毛孔粗有黑头怎么办 鼻子上有黑头怎么办小窍门 脸上很多粉刺和油脂粒怎么办 毛孔里都是角栓怎么办 脸上长了很多脂肪粒怎么办 脸上全是油脂粒怎么办