Skip to main content

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;

}

}

}




Comments

  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

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.