每次调用方法时如何增加数组[a] [b]的大小?

时间:2017-03-21 04:39:19

标签: java arrays

let group = DispatchGroup()

group.enter()
Alamofire.download(first url).responseData {
    process first url
    group.leave()
}

group.enter()
Alamofire.download(second url).responseData {
    process second url
    group.leave()
}

repeat for third and fourth url

group.notify(queue:Dispatch.main) {
    Alamofire.download(fifth url).responseData {
        process 5th url
    }
}

大家好我每次调用名为“isiData”的方法时都会尝试增加数组长度,但是没有用。我已经检查了增量,但没有任何问题。每次使用这种方法时,有没有办法增加它的长度?我想用一种简单的方法来输入book,category及其作者使用数组。

4 个答案:

答案 0 :(得分:2)

您无法增加数组的大小。 有3种方法可以解决这个问题:

  1. 按照其他人的建议使用ArrayList。
  2. 您可以创建另一个大小比前一个数组大的临时数组,然后将临时数组复制到已创建的数组。
  3. 您可以使用Java中的数组的copyOf(array, size)功能
  4. 例如:

    previousArray = Arrays.copyOf(previousArray , arraysize + 1);
    
    arraysize += 1
    

答案 1 :(得分:0)

试试这种方法:

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

/**
 *
 * @author Maverick
 */
public class Buku {

    public static int arraysize;
    public String namabuku;
    public String penulis;
    public String Kategori;
    public List<List<String>> bukuList = new ArrayList<List<String>>();

    public static void main(String[] args) {
        Buku n = new Buku();
        for (int i = 0; i < 5; i++) {
            n.isiData("ab" + i, "cd" + i, "ef" + i);
        }

        n.arraysize = n.bukuList.size();
        for (int i = 0; i < n.bukuList.size(); i++) {
            System.out.println(n.bukuList.get(i).toString());
        }
    }

    public void isiData(String kategori, String buku, String penulis) {
        bukuList.add(Arrays.asList(kategori, buku, penulis));
    }
}

输出:

[ab0, cd0, ef0]
[ab1, cd1, ef1]
[ab2, cd2, ef2]
[ab3, cd3, ef3]
[ab4, cd4, ef4]

答案 2 :(得分:0)

您必须调用new数组来更改数组的大小。我假设这是练习使用数组的练习,所以我将避免使用Arrays方法中的SystemisiData等类。你应该看看那些课程。

这样的事情:

public class BukuTest
{

   public String namabuku;
   public String penulis;
   public String Kategori;
   public String buku[][] = new String[ 0 ][ 3 ];

   public void isiData( String kategori, String buku, String penulis )
   {
      String[][] temp = this.buku;
      final int len = temp.length;
      this.buku = new String[ len + 1 ][];
      for( int i = 0; i < len; i++ )
         this.buku[i] = temp[i];
      this.buku[len] = new String[ 3 ];
      this.buku[len][0] = kategori;
      this.buku[len][1] = buku;
      this.buku[len][2] = penulis;
      // not needed
      // arraysize++;
      // a++;
   }
   public static void main(String[] args) {
      BukuTest b = new BukuTest();
      b.isiData( "test1", "test2", "test3" );
      b.isiData( "test4", "test5", "test6" );
      b.isiData( "test7", "test8", "test9" );
      System.out.println(b);
   }

   @Override
   public String toString()
   {
      return "BukuTest{" + "namabuku=" + namabuku + ", penulis=" + penulis +
              ", Kategori=" + Kategori + ", buku=" + 
              Arrays.deepToString(buku) + '}';
   }

}

答案 3 :(得分:0)

使用ArrayList绝对是其他人评论和显示的方式,但是,如果你绝对倾向于使用二维字符串数组,那么这可以通过一个方便地命名为 redimPreserve()的自定义方法来完成,如下所示。

&#xA;&#xA;

正如 @ Jdman1699 在你的帖子中的评论中提到的,这是一种非常低效的方式来做这种事情,特别是对于更大的数组但是既然你问过,这是怎么做的:

&#xA;&#xA;
  //你的方法:&#xA; public int arraysize = 1;&#xA; public String [] [] buku = new String [arraysize] [3];&#xA;&#xA; public void isiData(String kategori,String buka,String penulis){&#xA; //我已将此方法的buku参数重命名为buka&#xA; //因为你不能有一个名为&#xA的参数变量; //与类全局变量相同。&#xA; buku = redimPreserve(buku,arraysize,3);&#xA; buku [arraysize-1] [0] = kategori;&#xA; buku [arraysize-1] [1] = buka;&#xA; buku [arraysize-1] [2] = penulis;&#xA; arraysize ++;&#xA;}&#xA;&#xA; // redimPreserve()方法:&#xA; public static String [] [] redimPreserve(String [] [] yourArray,int newRowSize,int ... newColSize){&#xA; int newCol = 0;&#xA; if(newColSize.length!= 0){newCol = newColSize [0]; }&#XA; //提供的2D数组的第一行将始终建立&#xA; //将包含在整个&#xA中的列数//数组的范围。传递给此方法的任何列值&#xA; //在第一行建立后,简单地忽略。&#xA; if(newRowSize&gt; 1&amp;&amp; yourArray.length!= 0){newCol = yourArray [0] .length; }&#XA; if(newCol == 0&amp;&amp; newRowSize&lt; = 1){&#xA;抛出新的IllegalArgumentException(“\ nredimPreserve()方法错误!\ n”&#xA; +“没有为2D数组提供列维度!\ n”);&#xA; }&#XA; if(newCol&gt; 0&amp;&amp; newRowSize&lt; 1&amp;&amp; yourArray.length!= 0){&#xA;抛出新的IllegalArgumentException(“\ nredimPreserve()方法错误!\ n”&#xA; +“为2D数组提供无行维度!\ n”);&#xA; }&#XA; String [] [] tmp = new String [newRowSize] [newCol];&#xA; if(yourArray.length!= 0){&#xA; for(int i = 0; i&lt; yourArray.length; i ++){&#xA; System.arraycopy(yourArray [i],0,tmp [i],0,yourArray [i] .length);&#xA; }&#XA; }&#XA;返回tmp; &#XA;}&#XA;  
&#XA;