【发布时间】: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循环将使任务更轻松、更快、更安全。