2017-09-05 62 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)