0
 package homework5;


import java.io.*;
import java.util.Arrays;
public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    MyStringBuffer strTest = new MyStringBuffer();
    // FIX ME if you see the following string is not on the same line
    System.out.println("stringTest is initilized - capacity=" + strTest.capacity() + " length=" + strTest.length());
    BufferedReader stdin = new BufferedReader(
                         new InputStreamReader( System.in ) );
    System.out.print("Enter a string:");
    String myString = stdin.readLine();
    strTest.append(myString); //TOTEST: test your append (String str)
    printStrTest(strTest);
    while (true) {
        // FIX ME if you see the following string is not on the same line
        System.out.println("Enter 1 of 4 options: ac (append a char), as (append a string), i (insert), d (delete), r (reverse), q (quit)");
        String opt = stdin.readLine();
        if (opt.equals("ac")) {
            System.out.print("Append a char:");
            char c = stdin.readLine().charAt(0);
            strTest.append(c); //TOTEST: test your append (char a) function
            printStrTest(strTest);
        } else if (opt.equals("as")) {
            System.out.print("Append a string:");
            String aStr = stdin.readLine();
            strTest.append(aStr); //TOTEST: test append with expandation
            printStrTest(strTest);
        } else if (opt.equals("i")) {
            System.out.print("Insert a char:");
            char c = stdin.readLine().charAt(0);
            System.out.print("Location:");
            int loc = Integer.parseInt(stdin.readLine());
            strTest.insert(loc, c); //TOTEST: test your insert
            printStrTest(strTest);
        } else if (opt.equals("d")) {
            System.out.print("Delete at location:"); // TOTEST delete
            int loc = Integer.parseInt(stdin.readLine());
            strTest.deleteCharAt(loc);
            printStrTest(strTest);
        } else if (opt.equals("r")) {
            strTest.reverse(); //TOTEST reverse
            printStrTest(strTest);
        } else if (opt.equals("q")) {
            System.out.println("Goodbye!!!");
            break;
        } else {
            System.out.println("Error option entered:" + opt);
        }
    }
}

static void printStrTest(MyStringBuffer strTest){
    // FIX ME if you see the following string is not on the same line
    System.out.println("New string:" + strTest.toString()+ ",cap=" + strTest.capacity() + " len=" + strTest.length());
}
}

class MyStringBuffer {
//TODO explain: why you would need these data members.
private char[] chars; //character storage. 
private int length;   //number of characters used.  efficient

public MyStringBuffer(){
    chars = new char[16]; //Default storage is 16
    length  = 0; // No char
}

public int capacity(){
    return chars.length;
}

//Expanse the capcity of the chars storage
void expandCapacity(int minimumCapacity) {
int newCapacity = (chars.length + 1) * 2;
    if (newCapacity < 0) {
        newCapacity = Integer.MAX_VALUE;
    } else if (minimumCapacity > newCapacity) {
    newCapacity = minimumCapacity;
}
    chars = Arrays.copyOf(chars, newCapacity);
}

public int length(){
    return length;
}

public String toString(){
    //TODO

    //Hint: just construct a new String from the ‘chars’ data member
    //and return this new String – See API online for how create
    //new String from char[]

String result = new String(chars, 0, length);
return result;
}

public MyStringBuffer append (char c){

    //TODO
    //You will need to call the expandCapacity if necessary

    return this;
}

public MyStringBuffer append (String str){
    //TODO
    //You will need to call the expandCapacity if necessary

    return this;
}

public MyStringBuffer insert (int offset, char c){
    //TODO
    //You will need to call the expandCapacity if necessary

    return this;
}

public MyStringBuffer deleteCharAt(int index) {
    //TODO

    return this;
}

public MyStringBuffer reverse (){
    //TODO

    return this;
}
}

嗨,我读了这个http://www.roseindia.net/java/beginners/StringBuffer.shtml,我了解如何在这些情况下附加内容,但我不知道如何在这个情况下应用它。我想参考什么?我想我应该做这样的事情: strbuf.append("Hello"); 但是我放什么代替strbuf?我尝试了一些差异参考,但他们一直说找不到变量。有人可以给我看吗?我很确定我可以完成剩下的工作。或者至少我希望我可以。我以为是 myString ,但没有用。

谢谢 :)

4

1 回答 1

0

在本作业中,目标不是使用 a StringBuffer,而是基于 a 创建自己的char[]

例如append(char c),您应该编写一个代码,将给定的字符添加到数组的末尾chars并增加长度(因为您刚刚添加了一个字符)。

这个任务是关于创建你自己的 StringBuffer 实现并理解它是如何工作的,而不是直接使用它。

于 2010-10-16T11:23:01.573 回答