For loop with if, else 不工作,因为它正在打印 else if 部分,即使元素在数组中
For loop with if, else not working as it is printing the else if section even though element is in the array
我知道循环是遍历数组中的每一个元素!因此,在打印出他的信息之前,它也会打印出 'John is not found'!我如何在没有'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:
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");
}
结果:
我假设您可以执行以下操作:
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());
}
}
}
您可以通过从 for 循环中删除未找到的条件来修复它。如果找到名称,它将打印详细信息,或者在 for 循环完成迭代并且“found”变量仍然为 false 后打印 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();
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");
}
}
}
代码目前过于频繁地打印“未找到”消息,因为它会在 每次找到不匹配的成员时打印它 。您只想在 for
循环结束时打印它。
我个人会将代码提取到一个方法中,这意味着您只需 return 找到成员即可。我还将“检查退出”代码移到 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.");
}
我知道循环是遍历数组中的每一个元素!因此,在打印出他的信息之前,它也会打印出 'John is not found'!我如何在没有'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:
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");
}
结果:
我假设您可以执行以下操作:
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());
}
}
}
您可以通过从 for 循环中删除未找到的条件来修复它。如果找到名称,它将打印详细信息,或者在 for 循环完成迭代并且“found”变量仍然为 false 后打印 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();
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");
}
}
}
代码目前过于频繁地打印“未找到”消息,因为它会在 每次找到不匹配的成员时打印它 。您只想在 for
循环结束时打印它。
我个人会将代码提取到一个方法中,这意味着您只需 return 找到成员即可。我还将“检查退出”代码移到 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.");
}