2010-10-16 70 views
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,但没有奏效。Java StringBuffer问题:如何在这种情况下追加一些东西?

谢谢:)

回答

0

在本次作业的目标是不使用StringBuffer,而是建立自己的基础上char[]

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

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

+0

@Colin Hebert对不起,但我误解了这一点? 您将实现MyStringBuffer类,它是StringBuffer类的简化版本(请参阅讲义:cis36L052)。该框架已经提供。你需要实现6个函数:append(char c),append(String str),insert(int offset,char c),deleteCharAt(int index),reverse()和toString()。错误,如果你不能建立该计划。 – CuriousStudent 2010-10-16 11:28:19

+0

该框架为您提供。您需要将以下代码复制到您的新程序中。无论何时您看到// FIX ME或// TODO注释,您都需要修复代码或添加新代码。如果无法构建程序,则必须进行调试,修复错误。 – CuriousStudent 2010-10-16 11:29:42

+0

@CuriousStudent,它表示你将**实现** StringBuffer的简化版本,而不是使用'StringBuffer'。 – 2010-10-16 11:30:17