无法确定数组中的索引

时间:2019-04-04 06:24:15

标签: java arraylist

将字符串添加到数组,以确定是否通过增加字符串的长度来对列表进行排序。如果不是,则打印违反此类顺序的第一个元素的索引。 如果数组中的字符串不同,则一切正常,例如,输入

113
13476
Neutral
wa

答案:索引(wa)3输出。

但是如果是这样的话:

123
12345
123

答案:索引(123)-0,但正确的答案是索引2

public class Solution {

    public static void main(String[] args) throws IOException {

             Scanner scan = new Scanner(System.in);
             ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            list.add(scan.nextLine());
        }
        int count = 0;
        for(int i = 0; i < list.size(); i++){
            if(count+2 > list.size()) {
                break;
            }
            if(list.get(i+1).length() <= list.get(i).length()){
                System.out.println(list.indexOf(list.get(i+1)));
                          break;
            }
                       count = count + 1;
        }
     }
}

3 个答案:

答案 0 :(得分:5)

您应该更改

list.indexOf(list.get(i+1))

i+1

由于String中多次出现同一List,因此您想返回违反排序的第一个元素的索引,即i+1(而不是第一个String的索引,该索引等于该元素)。

顺便说一句,即使您的List中没有重复的元素,使用list.indexOf(list.get(i+1))而不是简单地使用i+1也没有意义。

答案 1 :(得分:3)

您不需要使用lastIndexOf-您已经有了索引:

// Stsrt at index 1, as index 0 can never violate the rule:
for (int i = 1; i < list.size(); i++) {
    if (list.get(i).length() < list.get(i - 1).length() {
        System.out.println("Rule violated at index " + i + " (" + list.get(i) + ")");
        break;
    }
}

答案 2 :(得分:2)

您还可以使用PriorityQueue并在提供的比较器中进行检查

PriorityQueue<String> p = new PriorityQueue<>((a, b) -> {
      if (a.length() > b.length()) {
        throw new RuntimeException(a);
      }
      return 0;
    });

    p.add("foo");
    try {
      p.add("bar2");
    } catch (RuntimeException e) {
      System.out.println(p.size());
    }
  }