我知道回圈正在遍歷陣列中的每個元素!因此,它還會在列印出他的資訊之前列印出“John is not found”!我如何在沒有“找不到約翰”的情況下列印出他的資訊?
這是我的代碼:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Number of members: ");
int number = scanner.nextInt();
Member m[] = new Member[number];
scanner.nextLine();
for (int i = 0; i < number; i ) {
System.out.print("Name & number:");
String[] input = scanner.nextLine().split(" ", 2);
m[i] = new Member(input[0], input[1]);
}
System.out.println("Information Saved.\n");
boolean condition = true;
while (condition) {
System.out.print("Search a name or type exit: ");
String search = scanner.nextLine();
for (int x = 0; x < m.length; x ) {
if (search.equals(m[x].getName())) {
System.out.print(search "'s number is " m[x].getTel() "\n");
break;
} else if (search.equals("exit")) {
condition = false;
m[x].showAllMembers();
} else if (!search.equals(m[x].getName())){
System.out.print(search "is not found.\n");
}
}
}
}
會員等級:
class Member {
private String name, tel;
public Member(String name, String tel ) { // Constructor
this.name = name;
this.tel = tel;
}
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String name) {
this.name = name;
}
// Getter
public String getTel() {
return tel;
}
// Setter
public void setTel(String tel) {
this.tel = tel;
}
public void showAllMembers() {
System.out.print("Name:" name ", Number:" tel "\n");
}
結果:

uj5u.com熱心網友回復:
我假設您可以執行以下操作:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Number of members: ");
int number = scanner.nextInt();
Member m[] = new Member[number];
scanner.nextLine();
for (int i = 0; i < number; i ) {
System.out.print("Name & number:");
String[] input = scanner.nextLine().split(" ", 2);
m[i] = new Member(input[0], input[1]);
}
System.out.println("Information Saved.\n");
boolean condition = true;
while (condition) {
System.out.print("Search a name or type exit: ");
String search = scanner.nextLine();
if (search.equals("exit")) {
condition = false;
// method showAllMembers() should not exists in Member class, it'll be really better to migrate it to the separate method, because one single Member object shouldn't know anything about ALL members
showAllMembers(m);
}
int memberNumber = -1;
for (int x = 0; x < m.length; x ) {
if (search.equals(m[x].getName())) {
memberNumber = x;
break;
}
}
if (memberNumber != -1) {
System.out.print(search "'s number is " m[memberNumber].getTel() "\n");
} else {
System.out.print(search "is not found.\n");
}
}
public static void showAllMembers(Member members[]) {
for (Member member : members) {
System.out.println("Member name: " member.getName() ", number: " member.getTel());
}
}
}
uj5u.com熱心網友回復:
您可以通過將未找到的條件從 for 回圈中取出來修復它。如果已找到名稱,則將列印詳細資訊,或者在 for 回圈完成迭代后列印未找到,并且“找到”變數仍然為 false。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Number of members: ");
int number = scanner.nextInt();
Member m[] = new Member[number];
scanner.nextLine();
for (int i = 0; i < number; i ) {
System.out.print("Name & number:");
String[] input = scanner.nextLine().split(" ", 2);
m[i] = new Member(input[0], input[1]);
}
System.out.println("Information Saved.\n");
boolean condition = true;
while (condition) {
System.out.print("Search a name or type exit: ");
String search = scanner.nextLine();
boolean found = false;
for (int x = 0; x < m.length; x ) {
if (search.equals(m[x].getName())) {
System.out.print(search "'s number is " m[x].getTel() "\n");
found = true;
break;
} else if (search.equals("exit")) {
condition = false;
m[x].showAllMembers();
}
if (!found) {
System.out.print(search "is not found.\n");
}
}
}
uj5u.com熱心網友回復:
該代碼目前過于頻繁地列印“未找到”訊息,因為它每次找到不匹配的成員時都會列印它。您只想在for回圈結束時列印它。
我個人會將代碼提取到一個方法中,這意味著您可以在找到該成員后回傳。我還將“檢查退出”代碼移到for回圈之外。
所以你的while回圈看起來像這樣:
// No need for a "condition" variable - just break when we've seen "exit"
while (true) {
System.out.print("Search a name or type exit: ");
String search = scanner.nextLine();
if (search.equals("exit")) {
break;
}
findMember(m, search);
}
該findMember方法如下所示:
// TODO: You might want to return the member you've found
private static void findMember(Member[] members, String name) {
for (Member member : members) {
if (name.equals(member.getName()) {
// TODO: use string formatting here
System.out.println(name "'s number is " member.getTel());
return;
}
}
System.out.println(name " is not found.");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457657.html
