2013-01-16 77 views
0

目前我正在學習如何使用Java數組列表和我被困在一個簡單的,但惱人的問題..程序不替換字母

import java.util.*; 

public class ReplacingALetter 
{ 
public static void main (String[] args) 
{ 
    String word = "Banana"; 

    List underscore = new ArrayList(word.length()); 

    int i; 
    for (i=0; i<word.length(); i++) 
    { 
     underscore.add(i, "x"); 

    } 

    System.out.print(underscore); 

    System.out.println(); 
    System.out.print("Enter a letter: "); 

    Scanner sc = new Scanner(System.in); 

    String letter = sc.nextLine(); 

    if (sc.equals("B")) 
     { 
     underscore.set(word.indexOf("B"),"B"); 
     } 

    System.out.print(underscore); 

} 
} 

出於某種原因,它不是數組中替換第一個x '下劃線' 以字母B:/

該代碼的輸出爲[XXXXXX]

但是,當我輸入驗證碼:

import java.util.*; 

public class ReplacingALetter 
{ 
public static void main (String[] args) 
{ 
    String word = "Banana"; 

    List underscore = new ArrayList(word.length()); 

    int i; 
    for (i=0; i<word.length(); i++) 
    { 
     underscore.add(i, "x"); 

    } 

    System.out.print(underscore); 

    System.out.println(); 
    System.out.println("Switching First x with B: "); 


    underscore.set(word.indexOf("B"),"B"); 


    System.out.print(underscore); 

} 
} 

它完美的作品,輸出爲[B XXXXX]

想不通我做錯了什麼....

+3

您是否在調試器中逐步完成該程序? –

+4

'if(sc.equals(「B」))' - >'sc'是一個'Scanner',''B''一個字符串,它們永遠不會相等...... – jlordo

+0

@jlordo ..爲什麼害怕張貼作爲答案。這是一個完美的。 –

回答

0
if (letter.equals("B")) 
     { 
     underscore.set(word.indexOf("B"),"B"); 
     } 
0

你必須檢查,如果字母是等於B不SC等於B.

String letter = sc.nextLine();  
    if (letter.equals("B")) 
     { 
     underscore.set(word.indexOf("B"),"B"); 
     } 
+0

ohhhhhh上帝,我甚至沒有意識到這樣一個無辜的錯誤 - .-謝謝你們:D – user1985021

+0

@ user1985021歡迎您,...請接受任何人在這裏的答案,如果你很高興與.. ..祝你好運:) – PermGenError

0

修改這個片斷

Scanner sc = new Scanner(System.in); 

    String letter = sc.nextLine(); 

    if (sc.equals("B")) 
     { 
     underscore.set(word.indexOf("B"),"B"); 
     } 

Scanner sc = new Scanner(System.in); 

String letter = sc.nextLine(); 

if (letter.equals("B")) 
    { 
    underscore.set(word.indexOf("B"),"B"); 
    } 

在前者中,您將Scanner對象與字符串「B」進行比較,該字符串永遠不會相等。 在後者中,它將從標準輸入讀取的字符串與「B」進行比較。

1

if (sc.equals("B"))此條件始終爲false,因爲sc不是類String的對象。

你應該改變你的代碼:

if (letter.equals("B")) { 
    underscore.set(word.indexOf("B"),"B"); 
} 
+0

hmmmmmm我看到...所以我能做些什麼來改變x?如果你注意到我試圖創建一個hang子手,但首先我得到了簡單的東西工作:P – user1985021

+0

你應該將條件替換爲'letter.equals(「B」)',因爲我張貼後編輯:) –

2

我在你的2例發現唯一的區別是,一個使用一個,如果條件:

if (sc.equals("B")) { 
    underscore.set(word.indexOf("B"),"B"); 
} 

而另一個執行

underscore.set(word.indexOf("B"),"B"); 

無條件。您的scjava.util.Scanner"B"是一個字符串。它們不可能是平等的,所以這個方法在你的第一個例子中永遠不會被調用。