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及其作者使用数组。
答案 0 :(得分:2)
您无法增加数组的大小。 有3种方法可以解决这个问题:
copyOf(array, size)
功能例如:
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
方法中的System
和isiData
等类。你应该看看那些课程。
这样的事情:
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;