【问题标题】:Loops and arrays not following through没有遵循的循环和数组
【发布时间】:2013-10-08 23:28:42
【问题描述】:
int [] f = {1,2,3,4,5,5,4,3,2,1};
int [] b = {6,1};
System.out.println(Arrays.toString(hide(f,b)));

public static int [] hide(int [] front, int [] back) {
    int temp;
    int extraTemp;
    int nextTemp = 0;

    int [] hiddenAt = new int[front.length];
    //int [] shownAt = new int[front.length];

    for(int x = 0; x < front.length; x++){
        for(int y = 0; y <= back.length; y++){
            temp = x;
            if ((back.length > front.length) || (front[x] < 0 || back[y] < 0) || (front.length < 1 || back.length < 1)) {
                System.exit(0);
            }

            if (y < back.length - 1){
            nextTemp = Math.abs(back[y + 1] - front[x + 1]);
            }
            else {
                nextTemp = 0;
            }

            if (front[x] > back[y]) {
                System.out.println(temp);
            }
            else if (front[x] < back[y] && y >= back.length - 1 ) {
                extraTemp = back[y] - front[x];

                if (extraTemp > nextTemp){
                    extraTemp = nextTemp;
                }
                System.out.println(extraTemp);
            }
            else if (front[x] < back[y]) {
                extraTemp = back[y] - front[x];

                if (extraTemp > nextTemp){
                    extraTemp = nextTemp;
                }
                System.out.println(extraTemp);
            }
        }
    }
    return hiddenAt;
}

正在替换println 以查看正在生成的值。当我找出正确的值时,它们将是hiddenAt[z] = temp;

我需要它来比较front[0]back[0] 然后front[1]back[1] 等等。之后,它将转移到一个:front[1]back[1] 然后front[2]back[2]直到front[] 结束。我想找出最小的差异在哪里。 (在这种情况下,[] 中的数字是 4 和 5。)

我收到两个错误,一个是第 39 行 if ((back.length > front.length) || (front[x]

是错误的,第 9 行也是错误的。 公开课 2 { 公共静态 void main(String[] args) {

    int [] f = {1,2,3,4,5,5,4,3,2,1};
    int [] b = {6,1};
    System.out.println(Arrays.toString(hide(f,b)));
}

确切的错误是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at hw2.hide(hw2.java:39)
at hw2.main(hw2.java:9)

【问题讨论】:

  • 不太确定您的问题是什么!您的帖子中应该有一些带有问号的内容:P
  • 你得到的输出是什么,你期望什么?
  • 我收到一个错误,但我想要一个 {-4, -5} 的打印数组(对应于前面数组上的索引号的数字,其中两者之间的差异最小化)负号只是表示差异不是 0。
  • 虽然else if (front[x] &lt; back[y] &amp;&amp; y &gt;= back.length - 1 ) 不应该抛出异常,但这有点奇怪:y 如何变得比back.length-1更多

标签: java arrays loops


【解决方案1】:

您的问题是 Array 索引超出范围,因此您尝试访问不存在的元素。

在行中 if ((back.length > front.length) || (front[x] back[y] < 0你的for语句去&lt;= back.length

for(int y = 0; y <= back.length; y++){

所以 back 的长度为 2(有 2 个元素)但是您将在第三个循环中执行此循环三次 0,1,2 没有 back[2]back[0] = 6back[1] = 1

因此将for(int y = 0; y &lt;= back.length; y++){ 更改为for(int y = 0; y &lt; back.length; y++){ 将修复此特定错误

记住,长度从 1 开始(如果有元素)索引从 0 开始。

【讨论】:

  • 这会在行中创建一个不同的错误 (nextTemp = Math.abs(back[y + 1] - front[x + 1]);)
  • @user2449907 - 这揭示了另一个错误。它一直都在那里。
  • 请问,为什么当我进行更改时...它不再同时增加 x 和 y,所以它没有比较正确的元素?
  • 因为你已经嵌套了 for 循环,所以它们永远不会同时增加。尝试调试您的程序并单步执行。
【解决方案2】:

这是您的第二个数组问题:

        if (y < back.length - 1){
        nextTemp = Math.abs(back[y + 1] - front[x + 1]);
        }
        else {
            nextTemp = 0;
        }

当您检查y &lt; back.length - 1 时,您x 执行相同操作。

因此,假设您确实想要引用 front[x+1],则需要 if (y &lt; back.lenth-1 &amp;&amp; x &lt; front.length-1)

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2014-11-03
    • 2017-03-30
    • 1970-01-01
    • 2011-03-25
    • 2021-09-21
    相关资源
    最近更新 更多