使用compareTo();方法似乎不起作用

时间:2014-08-28 07:52:03

标签: java compareto

我是Java的新手,正在解决一些问题。我问上了一个问题"写一个程序来输入十个单词,然后按字母顺序显示第一个和最后一个单词"。这个问题含糊不清。它可能意味着将所有输入单词按字母顺序排列并显示其中的第一个和最后一个(更难)或按字母顺序显示第一个和最后一个输入单词(更容易)。我写了以下代码:

import java.util.Scanner;

public class Alphabetical {

public static void main(String[] args) {

    String[] s = new String[10];
    for (int i = 0; i < 10; i++) {
        System.out.println("Enter word");
        Scanner ins = new Scanner(System.in);

        s[i] = ins.nextLine().toLowerCase();
    }

    int result = s[0].compareTo(s[10]);

    if (result < 0) {
        System.out.println(s[0]);
        System.out.println(s[10]);
    }
    else if(result>0){
        System.out.println(s[10]);
        System.out.println(s[0]);
    }
    else{
        System.out.println("Words are identical so cannot be placed in alphabetical order");
        }
    }

}

但我发现了compareTo方法的一个越界异常,我不知道为什么。如果有人能提供帮助那就太好了。如果有人也能帮助解决问题的难度,那就更好了。

3 个答案:

答案 0 :(得分:2)

new String[10]创建一个包含10个元素的数组。

s[10]是数组的第11个元素,因为元素以0开头。所以你必须将s[9]视为最后一个元素。 compareTo不是您的问题

答案 1 :(得分:1)

因为你的“s”数组有10个元素。你改变你的代码

import java.util.Scanner;

public class按字母顺序排列{

public static void main(String [] args){

String[] s = new String[10];
for (int i = 0; i < 10; i++) {
    System.out.println("Enter word");
    Scanner ins = new Scanner(System.in);

    s[i] = ins.nextLine().toLowerCase();
}

int result = s[0].compareTo(s[9]);

if (result < 0) {
    System.out.println(s[0]);
    System.out.println(s[9]);
}
else if(result>0){
    System.out.println(s[9]);
    System.out.println(s[0]);
}
else{
    System.out.println("Words are identical so cannot be placed in alphabetical order");
    }
}

}

答案 2 :(得分:0)

您收到有关数组的错误的原因是因为数组以索引0开头并且最多比数组大小小1。因此,在大小为10的数组中,最高索引为9.您是否尝试在发布此问题之前在线搜索异常?

问题意味着什么,您必须向提供转让/问题的人澄清。