2015-05-21 2 views
0

Мне нужно создать пользовательский класс MyString, который эмулирует определенные методы, которые содержит класс String, в основном действуя как строка. Единственное, что я не могу использовать ничего из класса string, только конструктор в одном методе.Проблема с пониманием того, как эмулировать метод String.substring

Проблема, с которой я столкнулась, заключается в том, что метод подстроки работает правильно. Я продолжаю получать исключение из массива. Я также не уверен, как сравнить два объекта MyString.

package hw; 
import java.lang.reflect.Array; 
import java.util.Scanner; 
import java.util.Arrays; 

public class MyString { 

    private final char[] chars; 
    private final int index; 
    Scanner sc = new Scanner(System.in); 


    public MyString(char[] chars) { 
     this.chars = chars; 
     this.index = Array.getLength(chars); 
    } 


    //this is my trouble method 
    public MyString substring(int begin, int end) throws Exception{ 
     char[] t = {}; 
     int n = 0; 

     if(end > index){ 
      throw new Exception(); 
     } 
     if(begin < 0){ 
      throw new Exception(); 
     } 
     if(begin > end){ 
      throw new Exception(); 
     } 

     for(int i=begin-1;i < end;i++){ 
      t[n] = this.chars[i]; 
      n++; 
      System.out.print(t[n]); 
     } 
     System.out.println(t); 
     MyString myTemp = new MyString(t); 
     return myTemp; 
    } 


    //im not sure how to compare the two 
    public boolean equals(MyString s){ 
     char [] tempA = this.chars; 
     char [] tempB = s.chars; 
     return true; 
    } 


    /* 
    public static MyString valueOf(int i){ 
     Mystring string; 
     return MyString; 
    } 
    */ 

} 
+0

Знаете ли вы, что означает ArrayIndexOutOfBoundsException? – immibis

+1

Удалите весь код, который не требуется для решения проблемы. Это включает особенно большинство других методов вашего класса, кроме 'substring()'. – Timo

+0

@TimoSta в порядке, удалил кучу этого, извините за это. –

ответ

2

В substring методе t создается как пустой массив длины 0 (char[] t = {};). Просто измените это объявление в соответствии с размером итоговой строки char[] t = new char[end - begin]; (если конец является эксклюзивным).

Смежные вопросы