Monday, February 20, 2012

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

1 comment:

  1. The problem is that all data members of Valuable are 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.

    ReplyDelete