有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

编写一个方法,返回数组中最后一个值的索引,该值是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;
}

我知道这远远不是正确的答案。请帮忙


共 (5) 个答案

  1. # 1 楼答案

    最新情况:

    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;
        }
    
    }
    

    输出:

    4
    
  2. # 2 楼答案

    几乎没关系,你应该在这行后面加一个空格:

    result = arr[i];
    

    改变这一点:

    i%3==0
    

    为此:

    arr[i]%3==0
    

    因此,你一定会找到最后一个。此外,您的i应该从arr.length-1变为i>=0,因为列表从0开始

  3. # 3 楼答案

    您的解决方案几乎可以正常工作!你需要增加休息时间,但我看到其他人已经注意到了这一点。下面是另一个简单的方法(并不总是最有效的) 遍历整个数组并检查当前元素是否为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];
    }
    
  4. # 4 楼答案

    只需反向遍历这些值,并在找到倍数后立即返回。如果未找到任何内容且循环已完成,则返回-1。此外,您可以修改方法签名以传入任何多个值,例如3

    public class HelloWorld {
        public static void main(String... args) {
            int[] values = { 4, 7, 9, 7, 12 };
            
            System.out.println(findIndexForLastMultipleOf(3, values)); // 4
        }
         
        public static int findIndexForLastMultipleOf(int target, int... values) {
            for (int i = values.length - 1; i >= 0; i--) {
                if (values[i] % target == 0) {
                    return i;
                }
            }
            return -1;
        }
    }
    

    如果您定位的是一个值,而不是一个索引,那么您会返回什么?您应该将int框成一个Integer并返回null,如果没有任何值是倍数。如果决定对数组进行流式筛选,还可以返回一个Optional<Integer>

    public class MathUtils {
        public static void main(String... args) {
            int[] values = { 4, 7, 9, 7, 12 };
            
            System.out.println(findLastMultipleOf(3, values)); // 12
        }
         
        public static Integer findLastMultipleOf(int target, int... values) {
            for (int i = values.length - 1; i >= 0; i--) {
                if (values[i] % target == 0) {
                    return values[i];
                }
            }
            return null;
        }
    }
    
  5. # 5 楼答案

    问题

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

    • 检查值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;
        }
      
    • 您可以从头开始,重写result以返回最后一个

       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;
        }
      

    我还建议使用-1,因为它是一个未验证的索引,它表明您没有找到任何与条件匹配的值