首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较两个不同大小的数组?

如何比较两个不同大小的数组?
EN

Stack Overflow用户
提问于 2015-11-22 15:08:55
回答 3查看 2.7K关注 0票数 0

因此,我的任务是逐行读取文件,并将整数存储到数组中。然后在1-5、2-6、3-7等点中添加整数,并将它们存储到一个新的数组中。

在数组1中,比数组2多出4个值。我需要比较这些数组,看看array1是否比array2大0.999。

如果它确实更大,我需要打印出数组1中数字的位置。

现在,我的问题是,我的代码输出的每个数字都大于数组2中的相应数字。

代码:

代码语言:javascript
复制
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class Asgn7
{
    public static void main(String[] args) throws FileNotFoundException
    {   
        Scanner file = new Scanner(new File("asgn7data.txt"));
        double[] array = new double[file.nextInt()];
        double[] newArray = new double[array.length - 4];
        double tempVal = 0;
        int j = 0;
        int count = 0;

        while(file.hasNext())
        {
        for(int i = 0; i < array.length ; i++)
        {
            array[i] = file.nextInt();
        }

        for(j = 0; j < array.length - 4; j++)
        {
            for(int k = 0; k < 5; k++)
            {
                newArray[j] += array[j+k] / 5;  
             }

        }

        for(int i = 2; i < array.length; i++)
        {
            if(array[i] > (newArray[i-2] + 0.999));
            {
                count++;
                tempVal = count;
            }

             System.out.println(tempVal);
        }   
        }

    }
}

应该比较的数值是3-13.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-22 16:22:03

从图片判断,您没有将值放置在第二个数组中的正确索引中,或者没有匹配正确的值。

如果您希望它在图片中看起来完全一样,则应该声明第二个数组:

代码语言:javascript
复制
double[] newArray = new double[array.length - 2];

要填充它的循环应该更改为:

代码语言:javascript
复制
    for(j = 2; j < array.length - 2; j++)
    {
        for(int k = -2; k <= 2; k++)
        {
            newArray[j] += array[j+k] / 5;  
        }

    }

这将在第三,第四,第五.newArray中的元素。现在你可以直接比较它们了:

代码语言:javascript
复制
    for(int i = 2; i < array.length - 2; i++)
    {
        if(array[i] > (newArray[i] + 0.999))
        {
            count++;
            tempVal = count;
        }

        System.out.println(tempVal);
    }

如果您想像最初那样保存两个未使用的空格,而不是精确地响应图片,那么您应该像原来那样计算值。但是,请记住将每个元素与之前的一个两个位置进行比较,并在结束之前停止两个位置。

而不是

代码语言:javascript
复制
for(int i = 2; i < array.length; i++)

使用

代码语言:javascript
复制
for(int i = 2; i < array.length - 2; i++)

要打印位置,使用counttempVal构造是不必要的。你只需要打印i+1。还请注意,在;之后有一个if。这意味着它是一个空的if,并且它之后的块总是被执行。永远不要在;forwhile等之后使用if

票数 1
EN

Stack Overflow用户

发布于 2015-11-22 16:21:51

不清楚您在问题中要求的是什么,但是只要看一下您的代码,就可以不问逻辑了:

for(int i = 2; i < array.length; i++) { if(array[i] > (newArray[i-2] + 0.999)); { count++; tempVal = count; } System.out.println(tempVal); } }

如果您将system.out行重新定位如下,我认为您将得到如下所期望的:

代码语言:javascript
复制
    for(int i = 2; i < array.length - 2; i++)
    {
        if(array[i] > (newArray[i-2] + 0.999));
        {
            System.out.println(tempVal);
            // count++;
            // tempVal = count;
        }


    }   
    }

PS:请注意,我还更改了循环的边界,以停止数组的第13个成员的迭代,而不是15。

票数 0
EN

Stack Overflow用户

发布于 2015-11-22 16:27:19

你确定你解析的数字是正确的吗?请参阅Java: Reading integers from a file into an array,为什么不在解析之后打印出来以进行验证?

顺便说一下,这将使第二个数组的索引溢出(因为它是使用新的doublearray.length -4创建的):

代码语言:javascript
复制
for(int i = 2; i < array.length; i++)

那么你的代码运行吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33856284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档