Java Maximum序列越来越有序

时间:2017-09-05 23:44:08

标签: java

我正在编写一个程序,让用户输入一个字符串,并显示字符数量越来越多的子序列。然而,我的程序是将字符添加到数组中并创建多个等于字符串长度的数组。

我给出的例子是:

  

输入字符串:欢迎

     

结果:Welo

我的程序没有错误,但输入字符串时的输出“欢迎”是:

  

[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,o,m,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);
    }   

}
}

3 个答案:

答案 0 :(得分: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次,因此它将打印al 4次。

答案 1 :(得分:0)

尝试使用System.out.print(al.get(i))代替System.out.println(al)

答案 2 :(得分:0)

我知道这是一个过时的问题,但我认为它仍然可以从一些澄清中受益。手头的任务是找到给定序列的最长子序列的长度,使子序列的所有元素按升序排序。

以十进制字符串形式{87, 101, 108, 99, 111, 109, 101}查看字符串“Welcome”。最长的递增排序子序列是 {87, 101, 108, 111} 或“Welo”。