用于循环和对象控制



我正在尝试向数组中添加元素。数组的元素属于一个名为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;
        }
    }
}

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

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

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

最新更新