当我运行程序并输入等级&性别它对我大吼大叫,告诉我这是一个无效的性别。我不明白为什么如果我将“男性”输入控制台,它不等于字符串“男性”?请告诉我为什么这不起作用,也许有一些关于如何解决它的建议?谢谢!
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class BabyNames {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
System.out.print("Enter male or female: ");
String gender1 = input.next();
System.out.print("Enter rank: ");
int rank = input.nextInt();
while (!(gender1 == "female" || gender1 == "male")){
System.out.println("Please try again with a valid gender.");
System.out.println("");
System.out.println("Enter male or female: ");
gender1 = input.next();
}
while (rank <= 0 || rank > 1000){
System.out.println("Please try again with a valid rank.");
System.out.println("");
System.out.println("Enter rank: ");
rank = input.nextInt();
}
findRank(gender1, rank);
}
public static void findRank(String gender2, int rank) throws IOException {
File babyNames = new File("/home/skatty14/Downloads/BabyNames.txt");
Scanner input = new Scanner(babyNames);
int rankCount = 0;
while (input.hasNextLine()){
rankCount++;
System.out.println(rankCount);
if (gender2 == "male"){
String name = input.next();
System.out.println(name);
}
if (gender2 == "female"){
String name = input.next();
System.out.println(name);
}
}
}
}
答案 0 :(得分:4)
要比较Strings
,您需要使用.equals()
,因此请将所有字符串比较更改为==
,以改为使用.equals()
。
if(gender1 == "male") { ... }
会变成,
if(gender1.equals("male")) { ... }
等等。
答案 1 :(得分:1)
'=='运算符测试对字符串的引用的等效性,而不是字符串的内容,因此为什么你的代码没有给你预期的结果。
尝试使用表单
if (gender1.equals("female"))
等。代替。
答案 2 :(得分:1)
Anthony Forloney的答案是最好的
但如果需要,可以使用String API提供的intern()函数跳过等号。
if( gender1.intern() == "male".intern() ) { ... }
实习生
public String intern() 返回字符串对象的规范表示。
字符串池(最初为空)由String类私有维护。
当调用intern方法时,如果池已经包含一个等于此String对象的字符串(由equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。
接下来,对于任何两个字符串s和t,当且仅当s.equals(t)为真时,s.intern()== t.intern()才为真。