GaneshRfromSpace Ответов: 3

Как вывести количество отрицательных подмассивов из заданного массива ?


постановка задачи:

Учитывая массив из n целых чисел, найдите и выведите его число отрицательных подмассивов на новой строке.(Подмассив отрицателен, если общая сумма его элементов отрицательна.)

Пример Ввода

5
1 -2 4 -5 1

Пример Вывода

9

Мой код выкинул ранее (до редактирования)

Цитата:
Исключение в потоке "основной" Java для.яз.ArrayIndexOutOfBoundsException: 5
на решение.основными(решение.Ява:22)


Настоящий вывод для кода после редактирования таков.

Цитата:
Вход (stdin)
5
1 -2 4 -5 1
Ваш вывод (stdout)
7
Ожидаемый Результат
9
Сообщение Компилятора
неправильный ответ


Где я ошибаюсь ?

Это мой код
ПОСЛЕ РЕДАКТИРОВАНИЯ

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int a[] = new int[n];
        int b[] = new int[n];
        int count=0;
        int i,j,sum = 0;
        for(i=0;i<n;i++)
        {
            a[i] = scan.nextInt();
        }
        for(i=0;i<n;i++)
        {
            if(a[i]<0){count++;}
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                sum = a[i] + sum;
                b[j] = sum;
            }
        }
        for(j=0;j<n;j++)
        {
            if(b[j]<0){count++;}
        }
        System.out.println(count);

    }
}

[no name]

"Где я ошибаюсь", вы ошибаетесь, пытаясь получить доступ к элементу массива, который не существует.

GaneshRfromSpace

Да, это была грубая ошибка с моей стороны. Извиняюсь. Теперь я отредактировал запрос.

3 Ответов

Рейтинг:
6

GaneshRfromSpace

Из приведенных выше ответов я сделал изменения в свой код, и теперь он работает нормально. Спасибо.
Вот код.

import java.util.*;
public class Solution {

	  public static void main(String[] args) {
	        Scanner scan = new Scanner(System.in);
	        int n = scan.nextInt();
	        int a[] = new int[n];
	        int count=0;
	        int i,j,sum = 0;
	        for(i=0;i<n;i++)
	        {
	            a[i] = scan.nextInt();
	        }
	        scan.close();
	        for(i=0;i<n;i++)
	        {
	        	sum = 0;
	            for(j=i;j<n;j++)
	            {
	                sum = a[j] + sum;
	                if(sum<0){
		                count++;
	                }
	            }
	        }
	        System.out.println(count);
	    }
	}


Рейтинг:
2

Richard MacCutchan

sum = a[i]+a[i+1];

Если i затем указывает на последний элемент массива i + 1 приведу исключение. Вам нужно найти лучший метод сканирования вашего массива на наличие отрицательных значений.


Рейтинг:
2

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

Обратите внимание на то, что вы делаете с sum:

sum = a[i] + sum;


Совет: возьмите лист бумаги и попробуйте сделать это вручную, ваша программа должна использовать ту же процедуру.