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);

 }   
}

出于某种原因,它没有用字母 B 替换数组“下划线”中的第一个 x:/

该代码的输出是 [ 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 ]

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

4

5 回答 5

2

我在您的 2 个示例中发现的唯一区别是,一个使用 if 条件:

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

而另一个执行

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

无条件地。你sc是一个java.util.Scanner"B"是一个字符串。它们不能相等,因此在您的第一个示例中永远不会调用该方法。

于 2013-01-16T20:42:10.210 回答
1

if (sc.equals("B"))这个条件总是false因为sc不是类的对象String

您应该将代码更改为:

if (letter.equals("B")) {
    underscore.set(word.indexOf("B"),"B");
}
于 2013-01-16T20:41:44.813 回答
0
if (letter.equals("B"))
      {
        underscore.set(word.indexOf("B"),"B");
      }
于 2013-01-16T20:40:42.230 回答
0

您必须检查 letter 是否等于 B 而不是 sc 是否等于 B。

String letter = sc.nextLine();    
    if (letter.equals("B"))
      {
        underscore.set(word.indexOf("B"),"B");
      }
于 2013-01-16T20:41:30.587 回答
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”进行比较。

于 2013-01-16T20:41:36.327 回答