首页 > 解决方案 > 为什么我会收到此错误:数据结构(数组)?

问题描述

我基本上需要找到总和为负的子数组的数量。

import java.io.*;
import java.util.stream.IntStream;
import java.util.Arrays;
import java.util.Scanner;

public class Solution {

    static int add(int a[]) {
        int sum = 0;
        for (int i = 0; i < a.length; ++i) {
            sum = sum + a[i];
        }
        return sum;
    }

    public static void main(String[] args) {
        /*
         * Enter your code here.
         * Read input from STDIN.
         * Print output to STDOUT.
         * Your class should be named Solution.
         */
        int count = 0;
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];

        for (int k = 0; k < n; ++k) {
            arr[k] = sc.nextInt();
        }

        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n - i; ++j) {
                int slice[] = IntStream.range(j, j + i + 1).map(j -> arr[j]).toArray();
                if (add(slice) < 0) {
                    ++count;
                }
            }
        }

        System.out.println(count);
    }
}

编译消息

Solution.java:32: error: variable j is already defined in method main(String[])
int slice[] = IntStream.range(j, j + i + 1).map(j -> arr[j]).toArray();
                                                ^
1 error
Exit Status
255

标签: javaarraysstructure

解决方案


这是因为这里的变量范围j。当你在 map 中引用一个变量时,JVM 会尝试初始化它。在您的情况下,JVM 正在尝试使用映射的内容来初始化 j,但它在您的第二个 for 循环中已经可用。只需使用任何其他变量(例如“k”)即可完成。

import java.io.*;
import java.util.stream.IntStream;
import java.util.Arrays;
import java.util.Scanner;

public class Solution {
static int add(int a[])
{
    int sum= 0;
    for(int i = 0; i < a.length; ++i)
    {
        sum = sum + a[i];
    }
    return sum;
}

public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    int count = 0;
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] arr = new int[n];

    for(int k = 0; k < n; ++k)
    {
        arr[k] = sc.nextInt();
    }
    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j < n - i; ++j)
        {
            int slice[] = IntStream.range(j, j + i + 1).map(k -> arr[k]).toArray();
            if(add(slice) < 0)
            {
                ++count;
            }
        }
    }
    System.out.println(count);

}
}

推荐阅读