我目前正在学习如何在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]
无法弄清楚我做错了什么......
答案 0 :(得分:2)
我在你的两个例子中发现的唯一区别是,一个使用if条件:
if (sc.equals("B")) {
underscore.set(word.indexOf("B"),"B");
}
而另一个执行
underscore.set(word.indexOf("B"),"B");
无条件。您的sc
是java.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”进行比较。