Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

counting negative numbers in array

I am trying to find the counts for negative numbers in a 2d-array ( square- matix). In matrix if you go from up to down and left to write number increases. Logic here is to start from last column and proceed to the left. If you find the neg num then increase the row index and proceed the same way till the last row. I am getting the error in java code but not in python.

public class O_n 

{

public static void main(String[] args)

{

    int firstarray[][] = {{-2,-1,0},{-1,0,1},{0,1,2}};
    int secondarray[][] = {{-4,-3,-2},{-3,-2,-1},{-2,-1,0}};
    System.out.print ("First array has"+count_neg(firstarray));
    System.out.println("negative numbers");
    System.out.print ("Second array has"+count_neg(secondarray));
    System.out.println("negative numbers");
}

public static int count_neg(int x[][]){
    int count = 0;
    int i = 0; //rows
    int j = x.length - 1; //columns

    System.out.println("max column index is: "+j);
    while ( i >=0 && j<x.length){
        if (x[i][j] < 0){ // negative number
            count += (j + 1);// since j is an index...so j + 1
            i += 1;
        }
        else { // positive number
            j -= 1;
        }
    }
    return (count);
    }
}

I am getting this output

max column index is: 2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at O_n.count_neg(O_n.java:22)
    at O_n.main(O_n.java:9)
/home/eos/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java 
returned: 1
BUILD FAILED (total time: 0 seconds)

What is wrong with this code? the same thing worked in python...

def count_neg(array):
    count = 0
    i = 0 # row
    j = len(array) -1 # col
    # since we are starting from right side

    while j >= 0 and i < len(array):
        if array[i][j] < 0: 
            count += (j + 1)
            i += 1
        else:
            j -= 1
    return count
print(count_neg([[-4,-3,-1,1],[-2,-2,1,2],[-1,1,2,3],[1,2,4,5]]))
like image 265
Dishant Mewada Avatar asked Jun 03 '18 03:06

Dishant Mewada


People also ask

How do you sort an array with negative and positive numbers?

Declare an array and input the array elements. Start traversing the array and if the current element is positive, traverse to the next element in the array. If the current element is negative, right shift the positive elements by one position and insert the negative number in the sequence array[0 to n-1].

How do you sum negative numbers in Java?

To get the answer you are looking for in pl, you need to use bigint. Then detect the case when the result is less than Java Integer. MIN_INT (-2^31), which is the case where Java will give a positive result. To get what Java would give you, add 2^32.

Does sort work with negative numbers?

As we all know that counting sort is incapable of sorting negative numbers because it uses mapping array or intermediate array (which is used to map unsorted input array to sorted output array).


2 Answers

I would write the method like this, just go through the 2d array and increase count each time a negative number is found

public static int count_neg(int x[][]){
    int count = 0;

    for(int i = 0; i < x.length; i++){
        for(int j = 0; j < x[i].length; j++){
            if(x[i][j] < 0){
                count++;
            }
        }
    }
    return (count);
}
like image 53
Sacha Avatar answered Sep 28 '22 11:09

Sacha


Your indexes are reversed from the python version:

while j >= 0 and i < len(array)

To the Java version:

while (i >= 0 && j < x.length)
// Change to
while (j >= 0 && i < x.length)

Output:

max column index is: 2
3

If you are using Java8, you can use streams to implement count_neg:

public static int countNeg(int x[][]) {
    long count = Stream.of(x)
            .flatMapToInt(arr -> IntStream.of(arr))
            .filter(i -> i < 0)
            .count();
    return Math.toIntExact(count);
}
like image 23
StaticBeagle Avatar answered Sep 28 '22 11:09

StaticBeagle