如果输入与对象数组中的任何id元素匹配,我想返回值1
,否则返回-1
。
例如
27
vjxiyhc
kyoyfsl
34
oguybhh
cuaxany
10
oxhdjcs
gvhtlzw
19
thamkrf
arijclh
32
cvljyye
heijkiv
34
的输出应为1
。如果最后一个输入是25
,则输出应该是-1
。
下面给出的代码无法正常工作。它仅检查数组最后输入的id值。如果我输入27
或10
或19
,它仍然返回-1
。只有32
返回1
。请提出更改建议。
public class LibraryDemo
{
public static Library[] searchLibraryById(Library[] objArray, int inputid)
{
int out=0;
for(int i=0;i<objArray.length;i++)
{
if (objArray[i].id==inputid)
{
out=1;
}
else
{
out=-1;
}
}
System.out.print(out);
return objArray;
}
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
Library[] objArray=new Library[5];
for(int i=0;i<objArray.length;i++)
{
int id=sc.nextInt();sc.nextLine();
String name=sc.nextLine();
String address=sc.nextLine();
objArray[i]=new Library(id,name,address);
}
int inputid=sc.nextInt();
searchLibraryById(objArray, inputid);
}
}
class Library
{
int id;
String name;
String address;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id=id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address=address;
}
public Library(int id,String name, String address)
{
this.id=id;
this.name=name;
this.address=address;
}
}
答案 0 :(得分:1)
一旦找到输入值,您就需要跳出循环。 out
被覆盖,因为即使找到匹配项,您仍将继续检查剩余的数组索引
for(int i=0;i<objArray.length;i++)
{
if (objArray[i].id==inputid)
{
out=1;
break; // found match, break out of loop
}
else
{
out=-1;
}
}
System.out.print(out);
答案 1 :(得分:0)
比赛结束后,您并没有脱离for循环。如果数组中没有大量使用并行流的对象,则可以更有效地执行此操作。请参考下面的代码。
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import static java.util.stream.Collectors.toList;
public static Library[] searchLibraryById(Library[] objArray, int inputid)
{
List<Library> lib = Arrays.asList(objArray).parallelStream()
.filter(obj -> obj.id == inputid).collect(toList());
int out = lib.size() != 0 ? 1 : -1;
System.out.println(out);
return objArray;
}