0

i´m having an issue. I´m trying to remove a row from a 2D array which match a certain condition. I previously created a 2D array using

String [][] T = new String [line][column];

The user can choose the number of lines and column and populate the table with the value of his choice. One of the column must contain prices of items and those prices will be compared to a price limit given by the user and every item below the price must be deleted from the 2D array (the row). I have been told to use array. But here I need to use "for loop" and a 2D table.

So far that s what i have for the "removing part"

public static String[][] deleterow(String[][]T, int priceLimit)
    {
        // count number of lines matching the condition (used later to redefine the new size)
        int count=0;
        int priceItem;
        for (int i=0; i<T.length;i++)
        {
            for (int j=3; j<T[i].length;j++) // 4th colomn should contains prices
            {               
                priceItem = Integer.parseInt(T[i][j]);
                if (priceItem< priceLimit)
                {
                    count=count+1;
                }       
            }
        }
        String [][]T3 = new String [T.length-count][];
        for (int i=0; i<T.length;i++)
        {
            for (int j=0; j<T[i].length;j++)
            {
                priceItem = Integer.parseInt(T[i][j]);
                if(priceItem < priceLimit)
                {
                    T3[i][j]=T[i+1][j];
                }
                else
                {
                    T3[i][j]=T[i][j];
                }
            }           
        }
        System.out.println(count+" items deleted from the table");

Unfortunately i´m having a problem with the parsing from String to Int here so the code is not going further. What can be improved?

koursk
  • 15
  • 4
  • What is noteEleve? In first part where is priceItem is assigned value? Where are you getting error of parsing? Since you have used Integer.parseInt(), you know how to use it, then where is the issue? – sAm Jan 22 '22 at 15:33
  • I wrongly wrote the variable and just corrected it. I get the following error: Exception in thread "main" java.lang.NumberFormatException: For input string: "something". So i believe there is something with the Integer.parsInt() link to the fact that my original table is a 2D array of string. But i cannot figure out how to solve this problem. – koursk Jan 22 '22 at 15:36

1 Answers1

1

Here's a simple method that turns rows into null values if the 4th column is smaller than priceLimit, you'll have an array with null values after calling the method, but you can look up here Remove Null Value from String array in java to figure out how to remove null values from the array.

    public static void main(String[] args) {
        int lines = 4;
        int columns = 4;
        String[][] twoDArray = new String [lines][columns];
        for (int i = 0; i < lines; i++) {
            for (int j = 0; j < columns; j++) {
                twoDArray[i][j] = "test";
            }
        }
        twoDArray[0][3] = "5";
        twoDArray[1][3] = "10";
        twoDArray[2][3] = "15";
        twoDArray[3][3] = "20";
        System.out.println(Arrays.toString(twoDArray));
        deleteMatchingRow(twoDArray, 16);
        System.out.println(Arrays.toString(twoDArray));
    }

    public static void deleteMatchingRow (String[][] twoDArray, int priceLimit) {
        for (int i = 0; i < twoDArray.length; i++) {
            if (Integer.parseInt(twoDArray[i][3]) < priceLimit) {
                twoDArray[i] = null;
            }
        }
    }

Now regarding your exception java.lang.NumberFormatException you just have to make sure that in every row, the 4th column is indeed a parsable Integer and not a random String. Notice how in the main method I filled all the two D array with "test" and then reassigned the 4th column of every row into String numbers so they can be parsed by Integer.parseInt()

William
  • 58
  • 8
  • Thanks. I´m not so familiar with those array methods since i just recently started with java. Would it be possible to do the same using a new 2D array in which I could copy this new array while removing the "null". – koursk Jan 22 '22 at 18:25