2

Stringフィールドとフィールドを使用してクラスを作成する必要がありintます。引数のないコンストラクターは初期化する必要があります: 空の文字列と int の値 0。addChar(char)メソッドは、プログラムが新しい文字を string(name) に追加できるようにする必要があります。toString()メソッドはこの文字列を返す必要があり、length()メソッドはこの文字の数を表示する必要があります。私はこのようなことを試しました:

public class Word {

String name;
int number;

public Word() {

    name = "";
    number = 0;

}

public char addChar() {
  return ;
}

public String toString() {
  System.out.println(name); 
}

public int length() {
  return name.length();
  System.out.println (name.length());
}

public static void main(String[] args) {

}
}

しかし、文字列に1つの文字を追加できるメソッドを作成する方法(エラーがあります)と、これらのメソッドを使用してすべてが機能することを示すプログラムを作成する方法を本当に知りません。ありがとう

4

4 に答える 4

2

--AString不変であるため、変更することはできません。文字列を変更しようとすると、実際には新しい文字列オブジェクトがヒープ上に作成されます。

-使用するStringBuilderか、可変StringBufferである方が良いです。

--Java 5StringBuilderから生まれました。これは、スレッドセーフではありません。これは、の到着に存在していましたが、スレッドセーフです。StringBufferStringBuilder

//////////////////////編集済みパーツ///////////////////////

この方法で試してください.........................。

public class Word {

StringBuilder name = new StringBuilder();
int number;        // Class variable are already intialized to its initial value,
                   // in the case of int its 0.


                  // String already has an overridden toString method, so its not needed

public void addChar(String s) {

    name.append(s);
}


public String getString(){

    return name.toString();
}

public static void main(String[] args) {

    Word w = new Word();

    System.out.println(w.getString().length());
    w.addChar("hello");
    System.out.println(w.getString().length());
    w.addChar("Hi");
    System.out.println(w.getString().length());
 }
}
于 2012-11-18T17:07:22.303 に答える
1

少しリファクタリングが必要でしたが、ここで説明します。

public class Word {

private String name;
private int number;

public Word() {
    name = "";
}

public void addChar(char ch) {
  name += ch;
  number++;
}

public String toString() {
  return name; 
}

public int length() {
  return number;
}

public static void main(String[] args) {
    Word myWord = new Word();
    myWord.addChar('H');
    System.out.println(myWord);
    myWord.addChar('e');
    myWord.addChar('l');
    myWord.addChar('l');
    myWord.addChar('o');
    System.out.println(myWord);
    System.out.println(myWord.length());

}
}

結果:

H
Hello
5

変更点:

  • メソッドtoStringはを返しnameます。
  • メソッドの長さはを返しnumberます。
  • mainメソッドに小さな概念実証を追加しました。
  • addCharを実装し、returntypeをvoidに変更しました。
  • のデータ型nameStringBuilderに変更しました。
于 2012-11-18T17:07:55.830 に答える
1

あなたのコードは、少なくとも 2 つの問題でコンパイルされません: -

  1. あなたのtoStringメソッドは実際には何も返していません。むしろ、文字列を印刷しています。メソッド本体を変更して、名前を返します。

  2. あなたの長さの方法では、あなたは持っていunreachable codeます。決して実行されないステートメントのsysout後にステートメントがあります。return


さて、まず上記の問題を解決する必要があります。

次に、メソッドで、実際にasaddCharを渡して add に追加する必要があります。あなたはそれを見逃しています。また、追加したばかりのは実際には必要ありません。だから必要ありません。だけになります。変更したものを元に戻す方法がすでにあるためです。charparameterstringreturncharchar return typevoidOKtoStringstring

したがって、次のaddCharようになります。

public void addChar(char ch) {
    name += ch;
}

そして、あなたの変更されたtoStringメソッドlengthは次のようになるはずです: -

public String toString() {
    return name; 
}

public int length() {
    return name.length();
}

残りはすべて変更されません。

于 2012-11-18T17:03:57.270 に答える
0

コードの一部を修正しました。

ノート:

this("", 0)Stringとを受け入れるコンストラクタを呼び出しますint

addChar何も返さず、文字を追加するだけです。

toString文字列を返すだけです。

コード:

public class Word {
    String name;
    int number;

    public Word() {
        this("", 0);
    }

    public Word(String s) {
        this(s, 0);
    }

    public Word(String s, int i) {
        name = s;
        number = i;
    }

    public void addChar(char c) {
        name += Character.toString(c);
    }

    public String toString() {
        return name;
    }

    public int length() {
        return name.length();
    }

    public static void main(String[] args) {
        //do stuff
    }
}
于 2012-11-18T17:04:00.343 に答える