[英]Java method for checking whether an element of an array exists
我有兩個類,分別是 Ticket 和 Register。 Register 是一個 class,它接受一個 ticket 數組。 票證包含時間和帶有票證 ID 的字符串。 我的寄存器 Class 中的一種方法稱為 contains(),它返回一個 Boolean。它檢查寄存器是否包含具有該 ID 的票證。 我的問題是它只對第一個票證元素顯示 true 而對所有其他票證元素顯示 false 即使它包含票證,因此我相信問題出在我的 contains() function 上。我非常了解 Java 所以如果有人可以提供幫助我將不勝感激。 這是我的注冊代碼和我的驅動程序代碼。
/
// This is class called Register that has the methods:"add()","contains()","retrieve()" and the constructor "Register()"
public class Register{
public Ticket[] tickets;
public int numTickets;
public Register(){
tickets = new Ticket[100];
numTickets = 0;
}
public void add(Ticket ticket){ //add ticket method. Takes a ticket as a parameter and adds it to the array
tickets[numTickets] = ticket;
numTickets = numTickets+1; // incramenting array
}
public boolean contains(String ticketID){ //contains method. Takes a string from the ticket using the ID() method and uses as a parameter.
boolean b = false;
for (int i = 0;i<100;i++){
if (ticketID.equals(tickets[i].ID())){ // checks to see if ticket ID is in the array
b = true; // return value is true if found
break;
}
break;
}
return b; // returns true of false
}
public Ticket retrieve(String ticketID){ // returns the ticket with the specified ID
int j = 0; // initializing return value
for (int i = 0;i<100;i++){
if (ticketID.equals(tickets[i].ID())){
j = i;
break;
}
}
return tickets[j]; // returns ticket
}
}
這是我的驅動程序代碼
public static void main(String[] args){
Register r = new Register();
Ticket t;
t = new Ticket(new Time("13:00"), "00001");
String ID_One = t.ID();
r.add(t);
t = new Ticket(new Time("13:18"), "00002");
String ID_Two = t.ID();
r.add(t);
System.out.println(r.contains(ID_One));
System.out.println(r.contains("00002"));
System.out.println(r.retrieve(ID_Two).toString());
Output 是:
true
false // this should be true
Ticket[id=00002, time=13:18:00]
刪除第二個break
,它總是在第一次迭代時退出for
循環,因此只會比較數組的第一個元素。
您可以將代碼簡化為 1 行:
public boolean contains(String ticketID) {
return Arrays.stream(tickets).map(Ticket::ID).anyMatch(ticketID::equals);
}
您在if
條件之外使用break
語句,因此它只會檢查第一個元素然后中斷循環。 您可以通過更好的格式立即看到這一點。
for (int i = 0; i<100; i++){
if (ticketID.equals(tickets[i].ID())){ // checks to see if ticket ID is in the array
b = true; // return value is true if found
break;
}
break;
}
刪除第二個break
以解決此問題,以便您僅在if
條件為真時中斷。
對於個人建議,如果每張票都有唯一 ID,您可能需要考慮使用Map結構。 這可以大大減少您的搜索時間。
int numTickets = 0;
Map<String, Ticket> ticketMap = new HashMap<>();
public void add(Ticket ticket) {
numTickets++;
ticketMap.put(ticket.ID(), ticket);
}
public boolean contains(String ticketId) {
return ticketMap.containsKey(ticketId);
}
public Ticket retrieve(String ticketId) {
return ticketMap.get(ticketId);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.