2017-03-21 2 views
1
public static int arraysize=1; 
public String namabuku; 
public String penulis; 
public String Kategori; 
public String buku[][]=new String[arraysize][3]; 
public static int a=0; 
public void isiData(String kategori, String buku, String penulis){ 
    this.buku[a][0]=kategori; 
    this.buku[a][1]=buku; 
    this.buku[a][2]=penulis; 
    arraysize++; 
    a++; 
} 

皆さん、「isiData」という名前のメソッドを呼び出すたびに配列の長さを増やそうとしましたが、動作しませんでした。私はすでに増分をチェックしましたが、それに間違いはありません。メソッドを使うたびに長さを増やす方法はありますか?私は、配列を使って本、カテゴリ、著者を簡単に入力したいと思っています。配列のサイズを増やす方法[a] [b]メソッドを呼び出すたびに?

+2

使い方 'ArrayList' –

+0

' buku's'型を 'ArrayList >'に変更します。そうしないと、独自の動的配列実装をロールバックする必要があります。 'buku'よりも大きなインデックスサイズを持つ一時配列を作成し、その一時配列に' buku'の内容をコピーし、 'isiData(...)呼び出しごとにその一時配列に' buku'を割り当てなければなりません。 ) '。 –

+0

他の人が言っていることは正しいです。配列の長さは固定されています。つまり、指定したサイズを変更することはできません。これを回避する唯一の方法は、古い配列の内容を 'oldarraylength + 1'というサイズの新しい配列にコピーすることですが、これはarraylistほど効率的でないか簡単ではありません。 – Jdman1699

答えて

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] 
1

あなたは、配列のサイズを大きくすることはできません。 この問題を解決するには、次の3つの方法があります。

  1. 他の人が示唆するようにArrayListを使用します。
  2. 以前の配列よりもサイズ1の別の一時配列を作成して、一時配列を既に作成済みの配列にコピーすることができます。
  3. あなたが例えばJavaの

内のアレイのcopyOf(array, size)機能を使用することができます。

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

arraysize += 1 
0

あなたは、配列のサイズを変更するnew配列を呼び出す必要があります。これは配列を使って練習するための演習だと思いますので、isiDataメソッドではArraysSystemのようなクラスは避けます。あなたはそれらのクラスを見なければなりません。

したがって、このような何か:

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) + '}'; 
    } 

} 
0

のArrayListを使用するには、間違いなく他の人がコメントして表示してきたようにここに行くための方法ですが、あなたは二次元文字列配列を使用して上絶対に曲げられているならば、これが可能これは便宜的にというredimPreserve()という名前のカスタムメソッドで行いました。 Jdman1699 @として

はあなたのポストの下で彼のコメントで述べていたが、これは特に大きなアレイのためにこの種のものを行うための非常に非効率的な方法ですが、あなたはここで、尋ねたので、それを行うことができる方法です。

// YOUR METHOD: 
public int arraysize = 1; 
public String[][] buku = new String[arraysize][3]; 

public void isiData(String kategori, String buka, String penulis){ 
    // I have renamed the buku argument for this method to buka 
    // since you can not have a parameter variable named the 
    // same as a Class Global variable. 
    buku = redimPreserve(buku, arraysize, 3); 
    buku[arraysize-1][0] = kategori; 
    buku[arraysize-1][1] = buka; 
    buku[arraysize-1][2] = penulis; 
    arraysize++; 
} 

// THE redimPreserve() METHOD: 
public static String[][] redimPreserve(String[][] yourArray, int newRowSize, int... newColSize) { 
    int newCol = 0; 
    if (newColSize.length != 0) { newCol = newColSize[0]; } 
    // The first row of your supplied 2D array will always establish 
    // the number of columns that will be contained within the entire 
    // scope of the array. Any column value passed to this method 
    // after the first row has been established is simply ignored. 
    if (newRowSize > 1 && yourArray.length != 0) { newCol = yourArray[0].length; } 
    if (newCol == 0 && newRowSize <= 1) { 
     throw new IllegalArgumentException("\nredimPreserve() Method Error!\n" 
       + "No Column dimension provided for 2D Array!\n"); 
    } 
    if (newCol > 0 && newRowSize < 1 && yourArray.length != 0) { 
     throw new IllegalArgumentException("\nredimPreserve() Method Error!\n" 
       + "No Row dimension provided for 2D Array!\n"); 
    } 
    String[][] tmp = new String[newRowSize][newCol]; 
    if (yourArray.length != 0) { 
     for(int i = 0; i < yourArray.length; i++) { 
      System.arraycopy(yourArray[i], 0, tmp[i], 0, yourArray[i].length); 
     } 
    } 
    return tmp; 
} 
関連する問題