2017-07-01 14 views
-4

このコードは、要素をテーブルに追加することになっていますが、最後に入力した要素のみがテーブルに存在するように見えます。コードをテストして修正したり、私はテーブルに要素を動的に追加することができますが、追加する要素の数を知らなくても意味があります。Javaの配列に要素を動的に追加します

import java.lang.String; 
import java.util.Scanner; 
public class Facture { 

private float Remise; 
private float THT; 
private float tva; 
private float quantite; 
private static String v1; 
private static float v2; 
private static int choix; 
private static String R="o"; 

public static void main(String[] args) { 
Scanner stdin=new Scanner(System.in); 

System.out.println("1.Ajouter un produit au system"); 
System.out.println("2.Retirer un produit au system"); 
System.out.println("3.Nouveau achat"); 
choix=stdin.nextInt(); 

int i=0,j=0; 
Produit[] t_p=new Produit[i]; 

if(choix==1) 
{ 
    do 
    { 
    t_p =new Produit[i+1]; 
    System.out.println("entrer le nom du produit"); 
    v1=stdin.next(); 
    System.out.println("entrer le prix du produit"); 
    v2=(float) stdin.nextDouble(); 
    Produit p=new Produit(v1,v2); 
    t_p[i]=p; 
    i++; 
    System.out.println("Voulez vous ajouter un autre produit o/n:"); 
    R=stdin.next(); 
    }while(R.toLowerCase().equals("o")); 

    while(j<t_p.length) 
    { 
     t_p[j].Affiche(); 
     j++; 
    } 

} 

System.out.println("i: "+i); 
System.out.println("length: "+t_p.length); 

System.out.println("t_p[0]: "+t_p[0].nom); 
System.out.println("t_p[1]: "+t_p[1].nom); 
}} 

答えて

1

ArrayListを使用できます。

List<Produit> array = new ArrayList<Produit>(); 
Produit p = new Produit(); 
array.add(p); 

は、あなたがそのような運動や何かのため動の大きさの配列が必要な場合は、this implementation. を見て基本的には、制限に達すると、新しい配列にすべての要素をコピーしたとき、配列のサイズを2倍にする必要があります。

+0

私は非常に長い時間のためにJavaを使用していないので、あなたはどのように愚かな私はこの言語になった想像することができますありがとうありがとう –

1

あなたが「行う」ループ内のすべての反復のための新しい配列を割り当てているように見える:

t_p =new Produit[i+1]; 

その後、あなたはそれの最後の要素に記入:

t_p[i]=p; 

をしかし、あなたがするのを忘れて古い配列から他のすべての要素をコピーします。

このスキームを使用する理由は何ですか?代わりにリスト、つまりArrayListを使用できますか?

+0

それを済ませ、 –