Java 如何在ArrayList中查找第一个偶数整数<;整数>;?

Java 如何在ArrayList中查找第一个偶数整数<;整数>;?,java,arraylist,Java,Arraylist,在这个方法中,我试图在ArrayList中找到第一个偶数整数(供进一步使用) 然而,当我调用该方法时,我得到-1。据我所知,这意味着列表中没有整数(但实际上有) 代码如下: public static int rangeBetweenEvens(ArrayList<Integer> list) { int firstEven = 0; for (int i = 0; i < list.size(); i++) { firstEven

在这个方法中,我试图在
ArrayList
中找到第一个偶数整数(供进一步使用)

然而,当我调用该方法时,我得到-1。据我所知,这意味着列表中没有整数(但实际上有)

代码如下:

public static int rangeBetweenEvens(ArrayList<Integer> list) {

    int firstEven = 0;

    for (int i = 0; i < list.size(); i++)
    {
         firstEven = list.indexOf((i) % 2 == 0);

    }

    return  firstEven;
}
public static int rangebetween(数组列表){
int first偶数=0;
对于(int i=0;i
您正在尝试查找第一次出现的
(i)%2==0
,但是,这并没有达到您认为的效果。此表达式作为布尔表达式计算--
true
如果
i
为偶数,如果
false
为奇数。在第一次迭代中,
i
是0(偶数),但在列表中找不到
true
,因为那里存在整数,所以您将返回
indexOf
-
-1
的结果

在这里使用
indexOf
是一个错误,因为这会在列表中搜索特定值。相反,使用
get(i)
检索当前值,并测试它是否为偶数。如果是,则返回当前索引,否则继续搜索。如果未找到,则返回
-1

列表。indexOf((i)%2==0)内部条件返回布尔值。很可能这不是你所期望的

您的代码应该如下所示:

firstEven = -1;
lastEven = 0;
for (int i = 0; i < list.size(); i++) {
    if ( list.get(i) %2 == 0) {
        if (firstEven == -1)  firstEven = list.get(i);
        lastEven = list.get(i);
    }
}
first偶数=-1;
Last偶数=0;
对于(int i=0;i
您使用的是索引,而不是值。这样做:

for (int i = 0; i < list.size(); i++){
    if(list.get(i) %2 == 0){
         return list.get(i);
    }
}
for(int i=0;i
Java-8的实现方法(我说开始使用Java-8:p)


indexOf
返回在中找到值的索引,而不是索引中的值,您可以使用
get
检索该值,或者更好地使用增强的
for
循环语法:

public static Integer firstEven(List<Integer> list) {
    for (Integer curr : list) {
         if (curr % 2 == 0) {
             return curr;
         }
    }
    return null;
}
公共静态整数first偶数(列表){
对于(整数货币:列表){
如果(当前%2==0){
返回货币;
}
}
返回null;
}
请注意,顺便说一句,Java8的流语法可以帮助您更优雅地完成这项工作

public static Integer firstEven(List<Integer> list) {
    return list.stream().filter(i -> i % 2 == 0).findFirst().orElse(null);
}
公共静态整数first偶数(列表){
return list.stream().filter(i->i%2==0.findFirst().orElse(null);
}
接受一个元素并尝试在集合中查找它的索引,因此无法在其中获取条件,因为它将在列表中搜索不存在的
true | false

当您获得如下索引时,可以检查并中断循环:

public static int rangeBetweenEvens(ArrayList<Integer> list) {

        int firstEven = 0;

        for (int i = 0; i < list.size(); i++)
        {
                if(list.get(i) % 2 == 0) {
                        firstEven = list.indexOf(i);
                }

                break;

        }

        return firstEven;
}
public static int rangebetween(数组列表){
int first偶数=0;
对于(int i=0;i
该方法编写不正确。您应该使用get(i)而不是indexOf。即,for循环应如下所示:

for (int i = 0; i < list.size(); i++)
{
     if(list.get(i) % 2 == 0)
        return i;
}
for(int i=0;i
您可以使用高级for循环:

for(int i : list){
if(i%2==0)
return i;
}
您可能会在中找到有用的示例。基于此,要查找第一个偶数的索引(如果未找到,则返回-1),需要执行以下操作:

List List=Arrays.asList(11,10,1,42,5,11,7);
int first偶数=IntStream.range(0,list.size())
.filter(i->(list.get(i)%2==0))
.findFirst()
.orElse(-1);
System.out.printf(“在%d处的第一偶数”,第一偶数);
这将返回true或false。索引中没有真或假。 试试这个:

public static int rangeBetweenEvens(ArrayList<Integer> list) {

        int firstEven = 0;

        for (int i = 0; i < list.size(); i++)
        {
         if (list.get(i) % 2 == 0) {
              firstEven = list.get(i);
              break;
         }

    }

    return  firstEven;
}
public static int rangebetween(数组列表){
int first偶数=0;
对于(int i=0;i
试试这个

for (int i : list)
{
     if(i % 2 == 0)
        return i;
}
你可以用这个

import  java.util.Arrays;
import java.util.Scanner;

public class FirstEvenNumber {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String numbers;
        System.out.println("Enter numbers separated by coma without spaces:");
        numbers = sc.nextLine();
        String[] splited = numbers.split(",");
        sc.close();
        int [] array = Arrays.asList(splited).stream().mapToInt(Integer::parseInt).toArray();
        outerloop:
        for (int num : array){
            if (num%2 == 0){
                System.out.println(num);
                break outerloop;
            }
        }
    }
}
使用lambda函数避免%模运算符

Function first偶数=ints->{
整数rslt;
ListIterator it=ints.ListIterator();
while(it.hasNext())
如果((rslt=it.next())&1)==0)
返回(rslt);
返回(空);
};

firstEven.apply(列表)

您需要返回索引或值吗?您可以更明确地回答问题吗?或者,
.findFirst().ifPresent(System.out::println)
(或者您想调用的任何方法)。@chris-编辑了答案。。Donno我怎么错过了:(.谢谢你的回答。但是,问题是,在同一个方法中,我必须找到最后一个偶数的索引。你对此有什么建议?如果列表中没有整数,应该返回什么代码?我想如果作者想保留原始合同,应该有一个方法末尾的“return-1”。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
(i) % 2 == 0
public static int rangeBetweenEvens(ArrayList<Integer> list) {

        int firstEven = 0;

        for (int i = 0; i < list.size(); i++)
        {
         if (list.get(i) % 2 == 0) {
              firstEven = list.get(i);
              break;
         }

    }

    return  firstEven;
}
for (int i : list)
{
     if(i % 2 == 0)
        return i;
}
import  java.util.Arrays;
import java.util.Scanner;

public class FirstEvenNumber {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String numbers;
        System.out.println("Enter numbers separated by coma without spaces:");
        numbers = sc.nextLine();
        String[] splited = numbers.split(",");
        sc.close();
        int [] array = Arrays.asList(splited).stream().mapToInt(Integer::parseInt).toArray();
        outerloop:
        for (int num : array){
            if (num%2 == 0){
                System.out.println(num);
                break outerloop;
            }
        }
    }
}
Function<List<Integer>, Integer> firstEven = ints -> {
  Integer rslt;
  ListIterator<Integer> it = ints.listIterator();
  while( it.hasNext() )
    if( ((rslt = it.next()) & 1) == 0 )
      return( rslt );
  return( null );
};