for循环和对象控制

时间:2012-02-20 07:46:38

标签: java for-loop

我正在尝试向数组中添加元素。数组的元素是一个名为variable的自定义类。在有问题的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 个答案:

答案 0 :(得分:4)

问题是Valuable的所有数据成员都是static。这意味着它们由类的所有实例共享:

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

从数据成员和getter函数中删除static限定符。