简体   繁体   English

for循环和对象控制

[英]for-loop and object control

I'm trying to add elements to an array. 我正在尝试将元素添加到数组。 The elements of the array are of a custom class called variable. 数组的元素属于一个自定义类,称为变量。 In the problematic for loop, it basically adds the last element trying to be added throughout the loop. 在有问题的for循环中,它基本上添加了试图在整个循环中添加的最后一个元素。 Any help would be appreciated! 任何帮助,将不胜感激!

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;
        }
    }
}

The problem is that all data members of Valuable are static . 问题在于Valuable所有数据成员都是static This means that they are shared by all instances of the class: 这意味着它们由该类的所有实例共享:

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

Remove the static qualifiers from the data members, and from the getter functions. 从数据成员和getter函数中删除static限定符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM