使用Java查找数组中3的最后倍数
编写一个方法,返回数组中最后一个值的索引,该值是3的倍数 例如,在数组中 [4,7,9,7,12] 三者的最后一个倍数是'12',出现在指数4处 这是到目前为止我的代码。有人能帮我修改代码吗使用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) {
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];
}