2012-02-20 9 views
0

配列に要素を追加しようとしています。配列の要素は、variableというカスタムクラスです。問題のあるforループでは、基本的にループ全体に追加しようとしている最後の要素を追加します。どんな助けもありがとう!forループとオブジェクトコントロール

import java.util.*; 

public class ThiefsDilemma2{ 

public static void main(String[] args){ 

    ArrayList values = new ArrayList(args.length/2); 
    Valuable[] array = new Valuable[args.length/2]; 

    if(args.length%2 ==1){ 

     int weight = Integer.parseInt(args[args.length-1]); 
     boolean room = true; 
     int tracker = 0; 
     //problem!!!! Adds the last element throughout the loop 
     for(int i = 0; i < args.length/2; i++){ 
      array[i] = new Valuable(
          Integer.parseInt(args[args.length/2+i]), 
          Integer.parseInt(args[i])); 
     } 

     for(int i = 0; i < args.length/2; i++){ 
      System.out.println(array[i]); 
     } 

     while(values.size() > 0 && room){ 
      int lightest = 100000; 
      double value = 0.0; 
      int index = 0; 
      int counter = 0; 

      for(Object p: values){ 

      Valuable test = (Valuable)p; 

      //System.out.println(test); 
       if(test.getWeight() < lightest && !test.beenUsed()){ 
        lightest = test.getWeight(); 
        //System.out.println(lightest); 
       } 
       if(test.getValue() > value && !test.beenUsed()){ 
        index = counter; 
        value = test.getValue(); 
        //System.out.println(value); 
       } 
       else if(test.getValue() == value || !test.beenUsed()){ 
        if(test.getWeight() <= test.getWeight()){ 
         index = counter; 
        } 
       } 

       counter++; 

      } 

      //System.out.println(counter + " " + lightest + " " + value); 

      Valuable p = ((Valuable)(values.get(index))); 
      p.used(); 


      if(lightest > weight){ room = false;} 

      else{ 
       if(p.getWeight() <= weight){ 
        weight -= p.getWeight(); 
       } 

       System.out.println(p); 
       values.remove(p); 

      } 


     } 
     } 
    } 

    public static class Valuable{ 

     private static double value; 
     private static int weight; 
     private static boolean used = false; 

     public Valuable(int top, int bottum){ 
      value = ((double)top/(double)bottum); 
      weight = bottum; 
      //System.out.println(weight + " " + value); 
     } 

     public static double getValue(){ 
      return value; 
     } 

     public static int getWeight(){ 
      return weight; 
     } 

     public String toString(){ 
      return value + " " + weight; 
     } 

     public static void used(){ 
      used = true; 
     } 

     public static boolean beenUsed(){ 
      return used; 
     } 
    } 
} 
+1

この宿題はありますか?そうであれば、そのようにタグ付けする必要があります。 – I82Much

+0

期待される動作を記述してください – jdevelop

答えて

4

問題はValuableのすべてのデータメンバーがstaticであるということです。これは、それらが、クラスのすべてのインスタンスで共有されていることを意味します

private static double value; 
private static int weight; 
private static boolean used = false; 

は、データメンバから、ゲッター関数からstatic修飾子を削除します。