2

我必须使用Stringint字段创建类。没有参数的构造函数必须初始化:空字符串和 int 的 0 值。addChar(char)方法应该让程序向字符串(名称)添加新字符。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) {

}
}

但真的不知道如何编写可以将一个字符添加到 String 的方法(有错误)以及如何编写可以使用这些方法来显示它所有工作的程序。谢谢

4

4 回答 4

2

- AString不可变的,所以你不能改变它,当你试图改变一个字符串时,实际上在堆上创建了一个新的字符串对象。

-它更好地使用StringBuilderStringBuffer哪些是Mutable

- StringBuilderJava 5开始存在,它不是 Thread-Safe的,在Thread-Safe到来之前StringBuffer就存在,但它的Thread-SafeStringBuilder

///////////////////编辑部分///////////////////

试试这个方法………​​…………………

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

您的代码至少有 2 个问题无法编译:-

  1. 你的toString方法并没有真正返回任何东西。相反,它正在打印您的字符串。更改您的方法主体以返回您的姓名。

  2. 在您的长度方法中,您有unreachable code. 您有一个永远不会执行的sysout语句后的语句。return


现在,首先您需要解决上述问题。

然后在addChar方法中,您实际上需要传递一个charasparameter以添加到您的string. 你错过了它。此外,您实际上并不需要刚刚添加return的。char所以char return type不需要。只是voidOK。因为您已经有一种toString方法可以string恢复您的修改。

所以,你addChar应该看起来像: -

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

你的修改toStringlength方法应该是这样的: -

public String toString() {
    return name; 
}

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

其余均不变。

于 2012-11-18T17:03:57.270 回答
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 并将返回类型更改为 void。
  • 我将 Datatype 更改nameStringBuilder
于 2012-11-18T17:07:55.830 回答
0

我为你修复了一些代码。

笔记:

this("", 0)调用接受 aString和的构造函数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 回答