当前位置: 首页 > 知识库问答 >
问题:

编写程序输出一组按词典顺序排列的字符串。我三个字就越界了?[副本]

苏胤
2023-03-14

我目前正在下面的程序上工作。它需要3个输入单词,并按词典编撰顺序输出它们。我觉得我得到了一个越界的异常,因为我刚刚输入了一个错误的数字,但我找不到它。下面是代码:

class LexicoOrder {
      public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
                
        System.out.println("Enter a word: ");
        String firstword = in.nextLine();
        
        System.out.println("Enter another word: ");
        String secondword = in.nextLine();
        
        System.out.println("Enter one more word: ");
        String thirdword = in.nextLine();
         
    
        String[] words = {firstword, secondword, thirdword};
    
        for(int i = 0; i < 3; ++i) {
          for (int j = i + 1; j < 4; ++j) {
              
            if (words[i].compareTo(words[j]) > 0) { // receive error here. Out of bounds
    

              String temp = words[i];
              words[i] = words[j];
              words[j] = temp;
            }
          }
        }
    
        System.out.println("In lexicographical order:");
        
        for(int i = 0; i < 3; i++) {
          System.out.println(words[i]);
        }
      }
    }

共有1个答案

屠浩
2023-03-14
 for(int i = 0; i < 3; ++i) {
      for (int j = i + 1; j < 4; ++j) {
          
        if (words[i].compareTo(words[j]) > 0) 

问题是当j变成3时,它会达到点,所以单词[3]是越界的。改为使用以下内容:

 for(int i = 0; i < 3; ++i) {
      for (int j = i + 1; j < 3; ++j) {
          
        if (words[i].compareTo(words[j]) > 0) 

永远记住索引是从0开始的,所以你的索引是0,1,2而不是3。

 类似资料:
  • 根据字典顺序和自定义顺序对字符串数组进行排序(一种排列形式)。这是代码: 问题是,当我对一些输入运行此命令时,输出是正确的,而对于其他输入,输出是不正确的。我一直在调试它,但没有找到错误。 编辑: 阿德里安娜正在玩英文字母表。当她玩完字母表后,她意识到她把字母的位置弄乱了。现在,给定一组单词,她想知道根据她制作的新字母表排序,这些单词的字典排序是什么。 换句话说,给定英语字母表E和一组单词S的排列

  • 我在寻找字典上最小的字符串的排列数。 例如,< code>bbaa现在,字典上最小的字符串是< code>aabb,因此,排列是, < code>(1,2,3,4),(2,1,3,4),(1,2,4,3),(2,1,4,3)也就是4。 我对它的想法(在python中)是找到最小的字符串(基本上将其排序为字符串),然后创建一个计数器来存储每个字符的计数。 因为,我们不需要一个在字典上变得更大的字符串

  • 问题内容: 我有一个字符串数组,例如: 使用时,我按字典顺序对它们进行了排序,例如。 如何遍历根据数字值排序的字符串? 问题答案: 您可以将内置函数与一个键一起使用,以在比较之前将列表中的每个项目映射到一个整数: 输出量 使用此方法将根据需要输出字符串列表。

  • 示例输入:电脑很有趣 示例输出:有趣的是计算机 我不知道从哪里开始。请帮我完成这个项目。

  • 按字母顺序排序字符串中的字符。 使用扩展运算符(...),Array.sort() 和 String.localeCompare() 对 str 中的字符进行排序,使用 String.join('') 重新组合。 const sortCharactersInString = str => [...str] .sort((a, b) => a.localeCompare(b))

  • 问题内容: 我已经在Redis中使用排序集实现了排行榜。我希望具有相同分数的用户按时间顺序排序,即,第一名的用户应排名更高。当前,redis支持词典顺序。有没有一种方法可以覆盖它。手机号码被用作排序集中的成员。 我想到的一种解决方案是在移动电话号码之前添加时间戳,并维护散列以映射移动电话号码和时间戳。 这样,在任何情况下,我都可以通过从哈希添加前缀来获得给定用户的排名。 现在这不是我想要的。这将与