如果输入匹配Java对象数组中的元素,则返回一个值

时间:2019-03-22 19:06:40

标签: java

如果输入与对象数组中的任何id元素匹配,我想返回值1,否则返回-1
例如
27 vjxiyhc kyoyfsl 34 oguybhh cuaxany 10 oxhdjcs gvhtlzw 19 thamkrf arijclh 32 cvljyye heijkiv 34 的输出应为1。如果最后一个输入是25,则输出应该是-1
下面给出的代码无法正常工作。它仅检查数组最后输入的id值。如果我输入271019,它仍然返回-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;
}
}

2 个答案:

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