2014-01-28 109 views
0

编辑, 它真的很遗憾,我不能分享图片,但让我们再试一次。class in class in java

我有一个数组,其中有4个部分,第一部分只接受那些以a开头的字符串,最后一个以d开头的字符串。

输入串只包含A,B,C,d,使其简单,

当输入来自哪个是“BCDA”

,然后它将进入阵列1。然后接下来它应该选择数组[2],因为第二个字符是c,然后是数组[3],然后是数组[4]的字符a。

然后我会插入这个字符串。所以下一次,如果我想看到给定的字符串让说相同的“bcda”存在与否,而不是比较可用集中的所有字符串,我将遍历路径通过使用字符序列,然后我会知道这个字符串名称存在与否。

假设我输入了一些基于a,b,c,d的字符串。

对于ecample,“acdb”,“bcda”,“dbca”等。

我想要什么,当我的程序收到字符串“acdb”时,它会像这样保存。

---------------- 
| a| b | c | d | 
---------------- 
    | 
    | 
---------------- 
| a| b | c | d | 
---------------- 
     | 
     | 
---------------- 
| a| b | c | d | 
---------------- 
      | 
      | 
---------------- 
| a| b | c | d | 
---------------- 
    | 
    | 
and here it can add string in list 

很不幸,我不能添加图像,因为我的几点。 :(我希望我在自我创建的图像correctally解释。

所以,当我将伊斯利搜索任何字符串规定范围之内,然后我可以trevers,发现该字符串的存在与否。

我很困惑如何创建类中的类中的类... :(

我可以创建一个简单的列表,并在阵列中添加指定的字符串。这是很简单,但不能向前推进。

class MyList { 

    TreeSet<String> list = new TreeSet<String>(); 

} 

class Test 
{ 
    MyList Array[] = new MyList [4]; 

    public Test(){ 
     for (int k = 0; k < 4; k++){ 

      Array[k] = new MyList(); 
     } 
    } 
} 
+0

你想格式化你的输出吗? –

+0

为什么不使用TreeSet ? – richardtz

+0

'Collections.sort(str.toCharArray())' – Sorter

回答

0

如果你想创建一个班级,这里是你如何做到这一点。当你的内部类与你的外部类紧密相关时,你可以使用它,但在其他任何地方都不会使用它。或者,也许你只是想不管出于什么原因将它们组合在一起。

class OuterClass { 

    class InnerClass { 

    } 

} 

如果你想一类以自身,这里是你将如何实现这一目标。你可以这样做来创建一个对象列表。这看起来更像你想要做的。

class MyClass { 

    MyClass nextInTheList; 

    public MyClass() { 

    } 

    public void setNext(MyClass next) { 
     nextInTheList = next; 
    } 
} 
0

内部类几乎与您的问题无关。这里是你是什么真正要做的:

public class CharNode extends AbstractCollection<CharSequence>{ 
    Map<Character, CharNode> children = new HashMap<>(); 
    int mark = 0; 

    @Override 
    public void add(CharSequence s){ 
     if(s.length()==0){mark++; return} 
     if(!children.containsKey(s.charAt(0)) 
      children.put(s.charAt(0), new CharNode()); 

     children.get(s.charAt(0)).add(s.subSequence(1,s.length())); 
    } 

    @Override 
    public void remove(CharSequence s){ 
     if(s.length()==0){mark--; return;} 

     CharNode child = children.get(s.charAt(0)); 
     child.remove(s.subSequence(1,s.length())); 

     if(child.isEmpty()) children.remove(s.charAt(0)); 
    } 

    @Override 
    public boolean contains(CharSequence s){ 
     if(s.length()==0) return mark; 
     return children.containsKey(s.charAt(0)) && 
       children.get(s.charAt(0)).contains(s.subSequence(1,s.length())); 
    } 

    @Override 
    public int size(){ 
     int result = mark; 
     for(CharNode child: children.values()) result+= child.size(); 
     return result; 
    } 

    @Override 
    public Iterator<CharSequence> iterator(){ 
     return new Iterator<CharSequence>(){ 
      @Override public boolean hasNext(){ /* you do this part */ } 
      @Override public CharSequence next(){ /* you do this part */ } 
      @Override public boolean remove(){ /* you do this part */ } 
     } 
    } 


} 

的最后方法,iterator,涉及到使用匿名内部类,这是唯一的一种内部类的那是非常重要的,而只有类型我会推荐供不熟悉内部类工作方式的人使用。