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