2010-10-27 66 views
0

当我运行程序并输入排名&性别时,它对我大叫,并告诉我这是一个无效的性别。我不明白为什么如果我输入“男性”到控制台,它不等于字符串“男性”?可以请向我解释为什么这不起作用,也许有一些建议如何解决它?谢谢!使用从扫描仪取得的字符串不工作?

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

使用不区分大小写的字符串比较。 – zerodin 2010-10-27 02:05:28

回答

4

比较Strings,你需要使用.equals()所以更改所有的字符串比较与==使用.equals()代替。

if(gender1 == "male") { ... } 

会成为,

if(gender1.equals("male")) { ... } 

等等等等等等。

+0

只要更有效率'应该改变第二'if'为'else if'? – 2010-10-27 02:05:02

1

'=='运算符测试的是对字符串引用的等价性,而不是字符串的内容,因此为什么你的代码没有给你预期的结果。

尝试使用形式

if (gender1.equals("female")) 

等代替。

+0

谢谢!现在已经修复了,至少这个问题! :)我会在10分钟左右选择你的答案,它不会让我相当。 – 2010-10-27 02:11:49

1

安东尼Forloney的回答是最好的

,但你可以跳过平等的,如果你想与实习生的字符串提供的API()函数。

if(gender1.intern() == "male".intern()) { ... } 

实习生

公共字符串实习生() 返回字符串对象的规范表示。

最初为空的字符串池由类String私人维护。

当调用intern方法时,如果池已经包含与equals(Object)方法确定的此String对象相等的字符串,则返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。

因此,对于任何两个字符串s和t,当且仅当s.equals(t)为真时,s.intern()== t.intern()才为真。

+0

if(gender1.intern()==“male”)将起作用以及字符串文字已经被执行。 – cgull 2010-10-27 03:31:38