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 ]です

私が間違っていることを理解できません....

4

5 に答える 5

2

あなたの2つの例で見つけた唯一の違いは、if条件を使用することです:

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

一方、もう一方は実行されます

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

無条件に。あなたscjava.util.Scanner"B"文字列です。それらを等しくすることはできないため、最初の例ではメソッドが呼び出されることはありません。

于 2013-01-16T20:42:10.210 に答える
1

if (sc.equals("B"))は class のオブジェクトではないfalseため、この条件は常に存在します。scString

コードを次のように変更する必要があります。

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

sc が B に等しいのではなく、letter が 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 に答える