java - 数组索引越界项目欧拉问题 17

标签 java arrays string

我目前陷入了 Project Euler 中的第 17 个问题。一点背景知识:我的程序对于数字 1-120 运行良好。一旦超过 120,它就不会按照我的预期方式使用模运算符。我正在尝试修复它,但对于此问题的先前迭代,除法和余数函数工作正常,因此我试图找出导致条件错误的更改(I >= 120 && I < 1000)(Ps,不关心优化,我是一名编程学生,只是致力于创建和熟悉数组)。谢谢!

我尝试在不同时间使用除法和余数运算符,例如 (I >= 120 && I < 1000) 条件上的 s+= Ones[division(I)],但尚未修复错误。

public class LetterCount {

    public static void main(String[] args) {
        int i;
        String[] ones = {"","one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten","eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", ""};
        String[] tens = {"", "","twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety", ""};
        String[] hundreds = {"","onehundred", "twohundred", "threehundred", "fourhundred", "fivehundred", "sixhunded", "sevenhundred", "eighthundred", "ninehundred"};
        String[] thousand = {"", "onethousand"};
         String s  = new String();
         for(i = 0; i <= 126; i++) {
             if(i <= 20) {
                 s+= ones[i];
             }
             if(i == 20) {
                 //performs i / 10
                 s+= tens[division(i)];
             }
             if(i > 20 && i < 100) {
                 //performs i / 10 & i % 10
                 s+= tens[division(i)];
                 s+= ones[remainder(i)];
             } if (i == 100) {
                 //performs i / 100
                 s+= hundreds[division(i)];
             } if (i > 100 && i < 120) {
                 //performs i / 10, i % 10, and i / 100
                 s+= hundreds[division(i)];
                 s+= tens[division(i)];
                 s+= ones[remainder(i)];

             } if (i >= 120 && i < 1000) {
                 //performs i / 100, i / 10, and i % 10
                s+= hundreds[division(i)];
                s+= tens[division(i)];
                s+= ones[remainder(i)];


             } if (i == 1000) {
                 s+= thousand[division(i)];
             }
         }
         System.out.println(s);
    }

    public static int remainder(int i) {
        if (i >= 100 && i <= 1000) {
            return i % 100;
        } else if(i > 10 && i < 100) {
            return i % 10;
        }
        return i;
    }
    public static int division(int i) {
        if (i == 1000) {
        return i / 1000;
        } 
        if (i >= 100 && i <= 1000) {
            return i / 100;
        } if (i < 100)  {
            return i / 10;
        }
        return i;
    }
}

最佳答案

您的数组长度= 21
因此您可以访问的最后一个元素将是 ones[20]
但在您的函数 remainder(int i) 中,您最多可以返回 99
因为您的方法包含此行 return i % 100;
因此,当您使用 ones[remainder(i)];
如果返回的提醒值 > 20

,通常您会遇到数组索引越界

关于java - 数组索引越界项目欧拉问题 17,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621318/

相关文章:

ruby - 搜索符号数组 - Ruby

objective-c - 数组未按预期在 iOS 项目中填充

Java:如何将文本文件中的所有单词保存在字符串数组上

java - 如何从 RGB 值中分辨可见颜色

java - Eclipse:Apache Spark 2.1.1,org.apache.spark.logging 无法解析

java - 从Fragment到Activity中从EditText获取数据

javascript - 如何从在 javascript 中具有相同键的对象创建对象数组

mysql - Mariadb 10.1 DATETIME 空白值

c++ - C++ 函数中返回字符串中最常见字符的错误。多字节字符?

java - 没有setter的Java中的平衡二叉树