我正在编写一个程序,让用户输入一个字符串,并显示字符数量越来越多的子序列。然而,我的程序是将字符添加到数组中并创建多个等于字符串长度的数组。
我给出的例子是:
输入字符串:欢迎
结果: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);
}
}
}
答案 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”。