程序不替换字母

时间:2013-01-16 20:37:45

标签: java

我目前正在学习如何在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);

 }   
}

由于某种原因,它不是用字母B替换数组'下划线'中的第一个x:/

该代码的输出为[x x x x x x]

但是当我输入这段代码时:

    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 x x x x x]

无法弄清楚我做错了什么......

5 个答案:

答案 0 :(得分:2)

我在你的两个例子中发现的唯一区别是,一个使用if条件:

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

而另一个执行

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

无条件。您的scjava.util.Scanner"B"是一个字符串。它们不能相等,所以在第一个例子中永远不会调用该方法。

答案 1 :(得分:1)

if (sc.equals("B"))此条件始终为false,因为sc不是类String的对象。

您应该将代码更改为:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你必须检查字母是否等于B而不是sc等于B.

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

答案 4 :(得分: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”永远不会相等。 在后者中,它将从标准输入读取的字符串与“B”进行比较。