Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java查找数组中3的最后倍数_Java_Arrays - Fatal编程技术网

使用Java查找数组中3的最后倍数

使用Java查找数组中3的最后倍数,java,arrays,Java,Arrays,编写一个方法,返回数组中最后一个值的索引,该值是3的倍数 例如,在数组中 [4,7,9,7,12] 三者的最后一个倍数是'12',出现在指数4处 这是到目前为止我的代码。有人能帮我修改代码吗 public int findMultipleOfThree(int[] arr) { int result = 0; for (int i = arr.length-1; i > 0; i--) { if(i%3==0) {

编写一个方法,返回数组中最后一个值的索引,该值是3的倍数

例如,在数组中

[4,7,9,7,12] 三者的最后一个倍数是'12',出现在指数4处

这是到目前为止我的代码。有人能帮我修改代码吗

public int findMultipleOfThree(int[] arr)
{
    int result = 0;
    for (int i = arr.length-1; i > 0; i--)
    {
        if(i%3==0)
        {
            result = arr[i];
        }
    }
    return result;
}
我知道这远远不是正确的答案。请帮助更新以下内容:

public class Testing {
    public static void main(String[] args) {
        int[] arr = new int[] { 4, 7, 9, 7, 12 };
        System.out.println(findMultipleOfThree(arr));

    }

    public static int findIndexMultipleOfThree(int[] arr) {
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 3 == 0) {
                index = i;
            }
        }
        return index;
    }

}
问题 您已经为比较和结果切换了元素,您需要

  • 检查值
    if(arr[i]%3==0)
  • 返回标记
    result=i

解决方案
  • 最佳:您可以从头开始,返回第一个匹配项,然后进行最小迭代

      public static int findMultipleOfThreeBackward(int[] arr) {
          for (int i = arr.length - 1; i > 0; i--) {
              if (arr[i] % 3 == 0) {
                  return i;
              }
          }
          return -1;
      }
    
  • 您可以从头开始执行,然后覆盖
    结果
    以返回最后一个结果

     public static int findMultipleOfThreeForward(int[] arr) {
          int result = 0;
          for (int i = 0; i < arr.length; i++) {
              if (arr[i] % 3 == 0) {
                  result = i;
              }
          }
          return result;
      }
    
    公共静态int-findMultipleOfThreeForward(int[]arr){
    int结果=0;
    对于(int i=0;i


我还建议使用
-1
,因为它是一个未验证的索引,它表明您没有找到任何与条件匹配的值几乎可以,您应该在这行后面加一个分隔符:

result = arr[i];
改变这一点:

i%3==0
为此:

arr[i]%3==0

因此,你一定会找到最后一个。此外,您的i应该从arr.length-1变为i>=0,因为列表从0开始,只需反向循环数值,并在找到倍数后立即返回。如果未找到任何内容且循环已完成,则返回
-1
。此外,您可以修改方法签名以传入任意多个值,例如
3

公共类HelloWorld{
公共静态void main(字符串…参数){
int[]值={4,7,9,7,12};
System.out.println(findIndexForLastMultipleOf(3,值));//4
}
公共静态int findIndexForLastMultipleOf(int目标,int…值){
对于(int i=values.length-1;i>=0;i--){
如果(值[i]%目标==0){
返回i;
}
}
返回-1;
}
}
如果您定位的是一个值,而不是一个索引,那么您会返回什么?您应该将
int
框成
整数
,如果没有整数,则返回
null
。如果决定对数组进行流式筛选,还可以返回一个
可选的

公共类数学{
公共静态void main(字符串…参数){
int[]值={4,7,9,7,12};
System.out.println(findLastMultipleOf(3,值));//12
}
公共静态整数findLastMultipleOf(int目标,int…值){
对于(int i=values.length-1;i>=0;i--){
如果(值[i]%目标==0){
返回值[i];
}
}
返回null;
}
}

您的解决方案几乎可以正常工作!你需要增加休息时间,但我看到其他人已经注意到了这一点。下面是另一种简单的方法(并不总是最有效的)。 遍历整个数组并检查当前元素是否为3的倍数。将最大索引存储在变量中,并在每次发现较大值时更新。返回arr[最大索引]。代码应该是这样的,希望我能帮助你

    public static int findMultipleOfThree(int[] arr)
{
    int max_index = -1; //if it does not find a multiple of 3 it will return -1
    for (int i = 0; i < arr.length-1; i++)
    {
        if(arr[i]%3==0)
        {
           if(i>max_index)
             max_index = i;

        }
    }
    return arr[max_index];
}
公共静态int findMultipleof三(int[]arr)
{
int max_index=-1;//如果找不到3的倍数,则返回-1
对于(int i=0;imax_索引)
最大指数=i;
}
}
返回arr[max_index];
}

您正在尝试获取第一个倍数。从第一个到最后一个,然后返回结果,或者如果从最后一个到第一个,那么当你得到3的倍数时,直接返回结果。而且,它应该是i>=0。@nice\u dev我喜欢你的逻辑。如果您试图查找最后一个值,则可以更快/更少地反向处理。@nice\u dev感谢您的更正!现在可以了。我也发现了缺陷。对于(int i=arr.length-1;i>=0;i--){if(arr[i]%3==0){return i;}}返回0@灰色返回-最后为1,以防你找不到任何一个。@Grey这样行吗?@Aniox他想要的是3@Aniox哈哈,你错了,
上一个值的索引
@azro正好!!哦什么指数?我错了!
可选的
作为返回值可能更好(而不是允许
-1
),这取决于对问题的有效回答。。。
    public static int findMultipleOfThree(int[] arr)
{
    int max_index = -1; //if it does not find a multiple of 3 it will return -1
    for (int i = 0; i < arr.length-1; i++)
    {
        if(arr[i]%3==0)
        {
           if(i>max_index)
             max_index = i;

        }
    }
    return arr[max_index];
}