当前位置: 首页 > 知识库问答 >
问题:

如何修复只使用偶数索引的方法?

许华清
2023-03-14

我编写了这个方法,检查下一个数组的索引数中是否包含一个数字,如果至少有一个数字是下一个数组的一部分,它将进入计数器,如果计数器的值大于0,它将进入一个变量“check”,该变量将等于true。
有一个索引为false就足以使整个数组为false。

例如,根据我构建的方法正确的数组:int[]arr={12,527,71,114,49,190};

这就是方法的解释。现在来解决我的问题。这个方法只适用于偶数,我不知道什么能起作用。感谢所有的帮手!

public static boolean checkSpecialArray(int[] arr)
    {
        int i = 0;
        int j = 0;
        int x = 0;
        boolean check = true;
        int counter = 0;
        for (i = 0; i < arr.length; i++)// array's length
        {String Dig = Integer.toString(arr[i++]);//next array's number
        String num = Integer.toString(arr[i]);//first array's number
            for (j = 0; j < num.length(); j++)// check first array's index number
                for (x = 0; x < Dig.length(); x++)// check 2nd array's index number
                    if (Integer.parseInt("" + num.charAt(j)) == Integer.parseInt("" + Dig.charAt(x)))//checks a digit to another digit
                        counter++;
                    
            if(counter>0)
            check = true;
                else if(counter==0)
                 return false;
            
            counter=0;  
        }
        if(check)
            return true;
        
        return false;
    } 

共有1个答案

太叔京
2023-03-14

我不得不猜测这里,但我想这是你问题的根源:

 for (i = 0; i < arr.length; i++) { // array's length 
   String Dig = Integer.toString(arr[i++]);//next array's number

在这里,您也在循环中增加i,这样它就跳过了数字。您可能希望执行integer.tostring(arr[i+1])

请注意,i++基本上与i+=1i=i+1相同,因此在循环的“Next”操作(for-constructure的第三部分)以及循环主体中使用该操作基本上会使循环主体从索引0、2、4等开始,这似乎只使用偶数索引。

另外,在第二行使用字符串num=integer.tostring(arr[i]);基本上使用“下一个”数字,而不是第一个。

最后,i 会对奇数长的数组造成问题,因为在正文中,您试图在末尾访问一个不存在的索引(由于 i++,但即使是 i+1也会造成这种情况)。

你为什么需要这个(根据你评论中的问题)?

现在让我们考虑循环条件的选项:

  • i -这将允许 i引用数组中的最后一个索引,因此 arr[i+1]将越界,因此出现异常
  • i<=arr.length-这将允许i获得更多超出界限的内容,并且arr[i]将已经失败
  • i -这将限制 i只能引用倒数第二个索引(例如,长度为5的数组中的索引3),因此 arr[i+1]仍然在边界内,并引用最后一个元素。

所以您希望循环如下所示:

//from first to second-to-last index
for (i = 0; i < arr.length - 1; i++) {
  String num = Integer.toString(arr[i]);//first array's number

  //also note the lowercase variable name which is more according to the Java code conventions
  String dig = Integer.toString(arr[i+1]);//next array's number

或者,您可以使用增强的for循环,例如:

 String prev = null;

 for( Integer num : arr ) {
   //or use Math.abs(num) to also be able to handle negative integers easily
   String next = Integer.toString(num);

   //only if there was a previous number
   if( prev != null ) {
     //compare digits/characters here
   } 

   //keep reference to the "current" number in string form to act as previous in the next iteration
   prev = next;
 }

 类似资料:
  • 我犯的错误 我的密码 我试图将数组的最后5个元素存储在temp 2中。那我就换了。有更简单的方法吗?将数组的前五个元素与后五个元素切换?你会如何用for循环切换它们?

  • 固定的: 我删除了while循环并添加了 我正在尝试向一个单词中随机添加一个额外的字母副本(介于0-8之间)。实例does可能会变成dooee或doess。 我的函数有时会工作,但总是会因越界索引错误而崩溃。 我假设我需要在某个时刻检查ArrayList中的空值。我试着用和if来包装我的while语句,以检查它,但没有任何改进。有什么建议吗?

  • 应用程序不能通过谷歌搜索进行索引;考虑使用ActoVIEW意图过滤器添加至少一个活动。有关更多详细信息,请参阅问题说明。较少的(Ctrl-F1)检查信息:添加URL以将你的应用程序放入谷歌索引,从谷歌搜索获取应用程序的安装和流量。 但是我已经考虑了一个带有动作视图意图过滤器的活动。请帮忙。

  • 问题内容: 这样做时 我收到一个模棱两可的类型错误。可以理解的是,编译器无法确定我是指还是from 。 当不使用方法引用时,我可能会通过显式转换来摆脱这种情况,或者长时间写出泛型,但是如何让编译器知道我的意思呢?我可以使用什么语法(如果有)来明确表达? 问题答案: 没有方法可以使方法引用明确。简而言之,方法引用是仅明确的方法引用才支持的功能。因此,你有两种解决方案: 使用lambda表达式: (至

  • 所以基本上我应该做的是,我应该得到一个字符串的数组列表,用两个字符串填充它,然后比较它们。例如,如果一个字符串是“1,2,3,4”,第二个字符串是“7,6,2,8,1”,那么它应该打印出“1,2”,因为它打印出的数字相似。但我遇到了和arrayindexoutofbounds异常,我不知道如何修复它。此外,如果你有任何可能缩短此代码的提示,也请告诉我。我有一个习惯,让我的代码超长。