2017-09-05 112 views
0

我正在編寫一個程序,讓用戶輸入一個字符串並顯示最大越來越有序的字符子序列。然而,我的程序正在將字符添加到數組中並創建等於字符串長度的多個數組。Java越來越有序的子序列

我給出的例子是:

輸入一個字符串:歡迎

結果:Welo

我的程序中沒有任何錯誤,但輸入字符串時,我的輸出,「Welcome」是:

[W,e,l,c,o,m,e]

[W,E,L,C,O,M,E]

[W,E,L,C,O,M,E]

[W,E,L,C,鄰,間,E]

[W,E,L,C,O,M,E]

[W,E,L,C,O,M,E]

[W ,e,l,c,o,m,e]

import java.util.ArrayList; 
import java.util.Scanner; 

public class orderSequence { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    // Create Scanner for input/output 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a string: "); 
    String input = sc.nextLine(); 

    ArrayList<Character> al = new ArrayList(); 

    for (int i = 0; i < input.length(); i++) { 
     ArrayList<Character> list = new ArrayList<Character>(); 
     list.add(input.charAt(i)); 

     for(int j = i + 1; j < input.length(); j++) { 
      if(input.charAt(j) > list.lastIndexOf(list)) { 
       list.add(input.charAt(j)); 
      } 
     } 

     if (list.size() > al.size()) { 
      al.clear(); 
      al.addAll(list); 
     } 
     list.clear(); 
    } 

    for (int i = 0; i < al.size(); i++) { 
     System.out.println(al); 
    } 

} 
} 
+0

至於我,我不明白應該做什麼。你能否添加更多的例子並給出更廣泛的問題解釋? –

+0

我會粘貼書本問題,因爲這是我所知道的所有信息。以上我發佈了我的輸出,與書籍輸出不同。 (最大增加次序的子序列)編寫一個程序,提示用戶輸入一個字符串並顯示字符的最大日益增加的子序列 。分析程序的時間複雜性。這裏是 示例運行: – Devin

+0

它應該採用最高字符並將它們按照有序順序排列。 – Devin

回答

2

問題發生在線if(input.charAt(j) > list.lastIndexOf(list))lastIndexOf函數返回上次傳入的對象所在的索引。那麼,你是通過名單本身,並在list無處不在list本身的元素之一。所以lastIndexOf方法返回-1。因此,你的character at j > -1總是成立,這就是爲什麼你的方法不斷返回數組中的整個字符串。

查看更多關於lastIndexOf的信息。

並修復你的方法的方法是做if(input.charAt(j) > list.get(list.size() - 1)),而不是

並且它是重複4次是因爲for循環你有在底部的原因。 al的大小是4,因此for循環將其內部的代碼運行4次,所以它將打印出4次al

+0

我的輸出已經變成「[W,e,l,o]」,現在重複了4次,即數組的大小。所以它現在按我想要的方式排序。謝謝! – Devin

+0

嗯,當然,一定要把這個標記爲答案,讓其他人都知道這個問題解決了這個問題 – MrWayFarOut

+0

是的,現在還在早期接受哈哈,但是你知道爲什麼它會重複四次而不是一次嗎? – Devin

0

嘗試System.out.print(al.get(i))而不是System.out.println(al)