2013-01-16 50 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"是一个字符串。它们不可能是平等的,所以这个方法在你的第一个例子中永远不会被调用。