将两个不等大小的java数组相乘

时间:2015-12-31 23:14:30

标签: java arrays

int a[]={1,1,2,2};

int b[]={1,1,1,1,3,3,2,2};

int ab[]=new int[b.length];

我想要乘以ab[]= a[]* b[]

ab []应该与= {1,1,2,2,3,3,4,4}

类似

我尝试循环,但我不知道如何做到这两个数组大小不相等

2 个答案:

答案 0 :(得分:2)

你的意思是ab [] = {1,1,2,2,3,3,4,4}?这将使它的大小为b。

假设一旦你在b中得到索引4,你想在一段时间内循环回索引0,这应该是相当简单的代码 - 我用C ++ 14编写了它。它应该是公平的适应Java。

这是输出:C:{1,1,2,2,3,3,4,4}

// Sample program to print out the product of two arrays
#include <iostream>
#include <type_traits>

int main(int argc, char* argv[])
{
    int a[] = {1, 1, 2, 2};
    int b[] = {1, 1, 1, 1, 3, 3, 2, 2};

    constexpr auto lengthA = std::extent<decltype(a)>::value;
    constexpr auto lengthB = std::extent<decltype(b)>::value;

    int c[lengthB] = { 0 };

    static_assert(lengthB > lengthA, "Length of b is expected to be greater than length of a!");

    int indexA = 0;
    for (int indexB = 0; indexB < lengthB; ++indexB)
    {
        c[indexB] = a[indexA] * b[indexB];

        indexA = (indexA + 1) % lengthA;
    }

    // Lets print out the resultant array
    std::cout << "C: {";
    for (int indexC = 0; indexC < lengthB; ++indexC)
    {
        std::cout << c[indexC];

        if (indexC < lengthB - 1)
        {
            std::cout << ", ";
        }
    }
    std::cout << "}" << std::endl;
    return 0;
}

编辑:冒着编写一些无法编译的代码的风险,这里是理论上合理但未构建的Java代码(只是真正重要的部分):

int a[]={1,1,2,2};
int b[]={1,1,1,1,3,3,2,2};
int ab[]=new int[b.length];

int indexA = 0;
for (int indexB = 0; indexB < b.length; ++indexB)
{
    ab[indexB] = b[indexB]*a[indexA];
    indexA = (indexA + 1) % a.length;
}

// At this point, ab should have what you need

答案 1 :(得分:1)

int a[]={1,1,2,2};
int b[]={1,1,1,1,3,3,2,2};
int ab[]=new int[b.length];

for (int i=0 ; i<b.length ; i++) {
    ab[i] = b[i] * a[i%a.length];
}

这应该会给你正确的结果。但是我没有检查数组长度,或者确保数组b比数组a长,所以请事先考虑这样做。