2010-10-27 88 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