【问题标题】:Check if exist a sequence of elements in array that fulfill predetermined conditions using recursion使用递归检查数组中是否存在满足预定条件的元素序列
【发布时间】:2014-06-06 21:38:00
【问题描述】:

条件以 int 数组形式给出,其中每个数字代表一个条件。

条件: 0 - 一位数字或 2 位数字。 1 - 一位数字。 2 - 2 位数字。

减速功能:

布尔匹配(Integer[] inputArray,Integer[] 模式)

如果条件数组是{1,0,2},我需要检查是否存在连续的一位数、一位或两位数和两位数的序列。

当递归成功找到模式的序列时,我没有找到停止递归的方法,并且它继续运行直到我得到一个不受欢迎的错误。

没能做到或想办法让它完成然后得到真(最后总是假)

非常感谢您的帮助!

public static boolean match(Integer[] a,Integer[] pattern)
    {
        int _counter = 0;
        int _variNum = 0;
        Integer[] _copyA= new Integer[a.length];_copyA=a;
        Integer[] _copyPattern= new Integer[pattern.length];_copyPattern=pattern;
        return match(_copyA,_copyPattern,pattern.length,a,pattern);
    }


    public static boolean match(Integer[] secA,Integer[] secPattern,int originPatternLength,Integer[] originA,Integer[] originPattern)
    {
        boolean success=false;
        System.out.println("\n");
        System.out.println("First array: "+Arrays.toString(secPattern)+" Second array: "+Arrays.toString(secA)+" to the rules...");
        System.out.println("_variNum: *"+_variNum+"* secPattern.length: *"+secPattern.length+"*     counter: "+_counter);

        success=(((originA.length-_counter)+_variNum)<originPatternLength)?false:true;
        success=(originPatternLength ==_variNum)?true:false;

        _counter++;
        if(secPattern.length>0)
        {
            switch ((secPattern[0]))
                {
                    case 0:
                        if(!(secA[0]>-100 && secA[0]<100))
                        {
                            Integer[] newArr = Arrays.copyOfRange(secA, 1, secA.length);_variNum=0;_counter=0;
                            match(newArr,secPattern,originPatternLength,originA,originPattern);
                        }
                        _variNum++;
                        Integer[] newArr = Arrays.copyOfRange(secA, 1, secA.length);
                        Integer[] newPArr = Arrays.copyOfRange(secPattern, 1, secPattern.length);
                        match(newArr,newPArr,originPatternLength,originA,originPattern);

                    break;
                    case 1:
                        if(!(secA[0]>-10 && secA[0]<10))
                        {
                            newArr = Arrays.copyOfRange(secA, 1, secA.length);_variNum=0;_counter=0;
                            match(newArr,secPattern,originPatternLength,originA,originPattern);
                        }
                        _variNum++;
                        newArr = Arrays.copyOfRange(secA, 1, secA.length);
                        newPArr = Arrays.copyOfRange(secPattern, 1, secPattern.length);
                        return match(newArr,newPArr,originPatternLength,originA,originPattern);
                    break;
                    case 2:
                        if(!(secA[0]>-100 && secA[0]<100&&(secA[0]>10||secA[0]<-10)))
                        {
                            newArr = Arrays.copyOfRange(secA, 1, secA.length);_variNum=0;_counter=0;
                            match(newArr,secPattern,originPatternLength,originA,originPattern);
                        }
                        _variNum++;
                        newArr = Arrays.copyOfRange(secA, 1, secA.length);
                        newPArr = Arrays.copyOfRange(secPattern, 1, secPattern.length);
                        match(newArr,newPArr,originPatternLength,originA,originPattern);
                    break;
                    default:
            }
        }

        return success;
    }`

【问题讨论】:

  • 对我来说,这听起来像是一个完美的迭代任务。为什么要首先使用递归?
  • 为什么要使用递归?两个嵌入式for 循环将使任务更轻松、更快、更安全。

标签: java arrays recursion


【解决方案1】:

试试 f.f.g 代码:

     public AnyClass(){
        private int a[];
        private int b[];
        String y ;


        public AnyClass(int c){
        a = new int[]{1,0,2};
        b = new int[c];
        }

        public void input(){
        for(int i = 0; i < c; i++){
        b[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter number"));
        }



        public String patternLocator(){
        for(int i = 0; i < b.length; i++){
        int c2 = 0;
        y = "";
        for(int c = i; c < i+3; c++){

        if(a[c2] == 1){
        if(b[c] < 10){
        y = y + "yes";
        }

    if(a[c2] == 2){
    if(b[c] > 9 && b[c] < 100){
      y = y + "yes";
    }
    }


    if(a[c2] == 0){
    if(b[c] < 100){
    y = y + "yes";
    }
    }
    }
    if(y.equals("yesyesyes")){
    y = true;
    return y;
    break;
    }
    c2++;
    }
     y = "false";
     return y;
    }

public static void main(String args[]){
int length = Integer.parseInt("Enter length of pattern you are about to enter");
AnyClass ob = new AnyClass(lenght);
ob.input;
String ans = ob.patternLocator();
if(ans = "true"){
System.out.println("pattern found");
}
else{
System.out.println("Pattern not found");
}
}

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2012-10-01
    • 2017-06-20
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多