当前位置: 首页 > 知识库问答 >
问题:

使用for循环从二维数组中删除与条件匹配的行

慕容玉书
2023-03-14

我有个问题。我试图从2D数组中删除符合特定条件的行。我以前使用

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

用户可以选择行数和列数,并用他选择的值填充表。其中一列必须包含项目的价格,这些价格将与用户给出的价格限制进行比较,低于价格的每个项目都必须从2D数组(行)中删除。我被告知使用数组。但是在这里我需要使用“for循环”和一个2D表。

到目前为止,这就是我的“删除部分”

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");

不幸的是,我在这里遇到了一个从字符串到Int的解析问题,所以代码不能再继续下去了。有什么可以改进的?

共有1个答案

洪飞驰
2023-03-14

这里有一个简单的方法,将行转换为空值,如果第4列小于priceLimit,您将在调用该方法后获得一个空值数组,但是您可以在这里查看从java中的String数组中删除空值,以了解如何删除数组中的空值。

    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;
            }
        }
    }

现在,关于您的异常java。lang.NumberFormatException您只需确保在每一行中,第4列确实是可解析的整数,而不是随机字符串。请注意,在main方法中,我用的“test”填充了所有两个D数组,然后将每行的第4列重新分配为字符串编号,这样就可以用整数解析它们。parseInt()

 类似资料:
  • 问题内容: 我有一个奇怪的问题。我以为这会花我几分钟,但现在我已经挣扎了几个小时……这就是我得到的: 该是 在ArrayList中我得到了一些字符串(共14个左右),和他们的9,它得名_Hardi。 并使用上面的代码,我想删除它们。如果我使用a,那么它将打印出9次,这是好的,因为_Hardi在ArrayList中是9次。 但是,当我使用它时,它不会删除所有9个,而只会删除几个。我做了一些测试,我也

  • 问题内容: 我想实现一种jQuery实时搜索。但是,发送输入到服务器之前,我想删除我的阵列,它有3点或更少的字符的所有项目(因为在德国的语言,这些话通常可以在搜索方面被忽略),所以成为 现在我的问题是,并非所有项目都在我的for循环中被删除。例如,如果我删除打字“这是一个测试”“是”,则“ a”保持不变。 我认为问题是for循环,因为如果我删除带有拼接的项目,则数组的索引会更改,因此它会继续使用“

  • 我当前正在将一个ArrayList转换为一个字符串,以便将其发送到一个DB,这样我就可以在另一端检索它,并稍后将其转换回一个ArrayList。 我的思路是通过执行以下操作将其转换为当前的字符串 是ArrayList,看起来如下所示: 当我查看数据库时,它看起来像这样 如何删除开头的和最后的以便在数据库上看起来像? 在另一端,我可以使用以下方法获得它: (我正在使用SQLite,这是我大学项目的一

  • 本文向大家介绍Java中增强for循环在一维数组和二维数组中的使用方法,包括了Java中增强for循环在一维数组和二维数组中的使用方法的使用技巧和注意事项,需要的朋友参考一下 一维数组: 输出:1 2 3 二维数组: 输出: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 以上就是小编为大家带来的Java中增强for循环在一维数组和二维数组中的使用方法的全部内容了,希望对大家有所帮助,

  • 并分别处理这两个数组。这是更好的解决方案吗?

  • 问题内容: 我有一个这样的对象数组: 我知道我可以找到匹配的项目,如下所示: 但是现在如何将其从原始文件中删除?我希望可以以某种方式返回索引,以便可以使用。或者更好的是,我想做这样的事情: 有任何想法吗? 问题答案: 您不了解的是Array是一个结构,因此 是一个值类型 。它不能像类实例那样在适当位置进行突变。因此,即使您扩展Array来编写一个变异方法,您也将始终在幕后创建一个新的数组。 因此,