warunek przepuszcza wartosc

0

witam,

mam nastepujacy problem. pisze program ktory szuka warosci w tablicy, i wykonuje na niej dalsze obliczenia tylko i wylacznie jesli zaden z wektorow jej w sobie nie posiada, tzn taka jest teoria. Niestety jesli wartosc juz istnieje w jednym z wektorow, program i tak wykonuje na wartosci obilczenia.

kod jest nastepujacy:

 if (Nodes_Array[currentNode][conn] != -1){//only check valid connections
	    			if(!queue_Vector.contains(Nodes_Array[currentNode][conn]) || !discard_Vector.contains(Nodes_Array[currentNode][conn])){		    		
                                    //add the connection to the queue
		    			queue_Vector.add(Nodes_Array[currentNode][conn]);		    				    	

jakies sugestie, bledy?
z gory dzieki,
Pozdrawiam

0

Możesz podać więcej kodu? Jak zadeklarowałeś wszystkie zmienne, które są pokazane w powyższym poście.
Trudno teraz coś poradzić sensownego.

0

To, co siedzi w wektorze musi mieć przeciążoną metodę equals.

Cytat z http://java.sun.com/javase/6/docs/api/java/util/Vector.html#contains(java.lang.Object)

Returns true if this vector contains the specified element. More formally, returns true if and only if this vector contains at least one element e such that (o==null ? e==null : o.equals(e)).

Jeżeli nie używasz wielu wątków, to lepiej zastosuj klasę ArrayList.

0
wooju napisał(a)

witam,

mam nastepujacy problem. pisze program ktory szuka warosci w tablicy, i wykonuje na niej dalsze obliczenia tylko i wylacznie jesli zaden z wektorow jej w sobie nie posiada, tzn taka jest teoria. Niestety jesli wartosc juz istnieje w jednym z wektorow, program i tak wykonuje na wartosci obilczenia.

kod jest nastepujacy:

 if (Nodes_Array[currentNode][conn] != -1){//only check valid connections
	    			if(!queue_Vector.contains(Nodes_Array[currentNode][conn]) || !discard_Vector.contains(Nodes_Array[currentNode][conn])){		    		
                                    //add the connection to the queue
		    			queue_Vector.add(Nodes_Array[currentNode][conn]);		    				    	

jakies sugestie, bledy?
z gory dzieki,
Pozdrawiam

...jesli wartosc juz istnieje w jednym z wektorow... <- jednym z wektorow, czy dokladnie w drugim wektorze? Zapoznaj sie doglebniej z zasadami instrukcji warunkowych i operatorow logicznych.

0
ws napisał(a)

...jesli wartosc juz istnieje w jednym z wektorow... <- jednym z wektorow, czy dokladnie w drugim wektorze? Zapoznaj sie doglebniej z zasadami instrukcji warunkowych i operatorow logicznych.

ws, zalozenie jest takie ze jesli 1 z wektorow, juz zawiera dana wartosc, to nalezy wartosc zignorowac i kontynuowac szukanie kolejnych.

dzieki wooju

0
wooju napisał(a)
ws napisał(a)

...jesli wartosc juz istnieje w jednym z wektorow... <- jednym z wektorow, czy dokladnie w drugim wektorze? Zapoznaj sie doglebniej z zasadami instrukcji warunkowych i operatorow logicznych.

ws, zalozenie jest takie ze jesli 1 z wektorow, juz zawiera dana wartosc, to nalezy wartosc zignorowac i kontynuowac szukanie kolejnych.

dzieki wooju

No to powinno być

if (!A && !B)...
lub
if (! (A || B))...
a nie
if (!A || !B)... (to samo, co if (! (A && B))... )

0
__krzysiek85 napisał(a)

<
No to powinno być

if (!A && !B)...
lub
if (! (A || B))...
a nie
if (!A || !B)... (to samo, co if (! (A && B))... )

dzieki krzysiek, wszystko dziala.
pozdrawiam

0

witam,

znowu mam podobny problem. znowu warunek przepuszcza wartosc, tylko tym razem zrobilem, jak kolega Krzysiek pokazal, ale mimo to przepuszczne sa wartosci ktore byc nie powinny.

zaczynamy od tego ze mam historie po jakich node doszedlem od req_from do req_to. wszystko jest zapisane w history_array. teraz, wg tego co jest tam zapisane, ide do node+1 szukam indexu w nodes array, po znalezieniu ide do wawvlength array i zbieram dostepne wavelengths i pakuje do avaliable_vector,

moze na przykladzie, wiec jesli w history array mam zapisane 0 1 3 5, ide do nodes array[0][i] i szukam pozycji 1. po znalezieniu, ide do wawalngth_array[0][index 1] [j] i zbieram dostepne i nie dostepne wavelengths. i teraz problem polega na tym ze od czasu do czasu, przy duzych ilosciach nodes, program do avaliable wsadza wartosci ktore juz istnieja w notAvaliable_vecor.

ja wiem ze to troche zagmatae co napisalem, ale moze ktos znajdzie chwile zeby to rozgryzc. kod metody jest tu:

 public void random_order(int req_to){
        System.out.println("Random order");
        //clear everything
        avaliable_Vector.clear();
        notAvaliable_Vector.clear();
        int position=0, wavelength;
        int tempPosition=0;
        //if history contains node 0 1 2, go to node 0, find position of 1, assume index=5
        //then go to wavelngths array fd i=0, sd i=5 and add all wavelengths to correct vectors.
        for(int i=1; i<history_Array[req_to].length; i++){
            if(history_Array[req_to][i] != -1){ //go to history array and find first element
                for(int j=0; j<Nodes_Array[history_Array[req_to][position]].length; j++){ //find index of "second" element from history array
                    if(Nodes_Array[history_Array[req_to][position]][j]==history_Array[req_to][position+1]){
                        tempPosition=j;
                        break;
                    }
                }
                for(int k=0; k<wavelength_Array[history_Array[req_to][position]][tempPosition].length; k++){
                    if(wavelength_Array[history_Array[req_to][position]][tempPosition][k]==0){
                        //add the avaliable wavelengths to the avaliable array
                        if(!avaliable_Vector.contains(k) && !notAvaliable_Vector.contains(k)){
                            avaliable_Vector.add(k);
                            System.out.println("k = "+k);
                        }
                    }
                    else if(wavelength_Array[history_Array[req_to][position]][tempPosition][k]==1){ //add all used wavelengths to vector
                        if(!notAvaliable_Vector.contains(k)){
                            notAvaliable_Vector.add(k);
                            if(avaliable_Vector.contains(k)){ //remove the wavelengths used by other path
                                avaliable_Vector.remove(k);
                            }
                        }
                    }
                }
                if (avaliable_Vector.size()==0){ //if no wavelength avaliable for any of the paths
                    System.out.println("No avaliable wavelength");
                    return;
                }
                position++;
            }
//            if (avaliable_Vector.size()==0){ //if no wavelength avaliable for any of the paths
//                System.out.println("No avaliable wavelength");
//                return;
//            }
        }
        Random wav = new Random(); //generate the avaliable waveleght from avaliable
        do{
            wavelength=wav.nextInt(wave_amount);
        }
        while(notAvaliable_Vector.contains(wavelength));
        System.out.println("Selected wave = "+wavelength);
        wavelength_asigment(req_to, wavelength);
        established++; //raise the established connection
    }

a caly program mozna pobrac stad: http://www.4shared.com/file/119854869/10e825ce/Network_project.html

zeby wywalil blad, i zeby zobaczyc co sie tam dziej w debug mode, najlepiej podac nastepujace wartosci:
numbero of nodes 10,
maximum number of conections 10
number of request 45
potem wybrac fixed routing 1
a potem random order 4

przy mniejszej liczbie nodes, generalnie jest ok.

z gory dzieki.
pozdrawiam

0

witam,

pozmianialem troche kod, i teraz dosaje nastepujacy blad, nie wazne jakie wartosci pwpisze:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 4
at java.util.Vector.remove(Vector.java:777)
at Network.Network.random_order(Network.java:195)
at Network.Network.breadthFirstSearch(Network.java:146)
at Network.Network.fixed_routing(Network.java:93)
at Network.Network.algorithms(Network.java:79)
at Network.Network.main(Network.java:426)

czy ten wyjatek znaczy ze staram sie usunac cos z pozycji/indexu 4, kiedy vektor ma mniej miejsc? jesli tak to w jaki sposob mam usunac z wektoru wartosc?

poki co, kod wyglada nastepujaco:

               for(int k=0; k<wavelength_Array[history_Array[req_to][position]][tempPosition].length; k++){
                    if(wavelength_Array[history_Array[req_to][position]][tempPosition][k]==0){
                        //add the avaliable wavelengths to the avaliable array
                        if(!avaliable_Vector.contains(k) && !notAvaliable_Vector.contains(k)){
                            avaliable_Vector.add(k);
                            System.out.println("k = "+k);
                        }
                    }
                    else /*if(wavelength_Array[history_Array[req_to][position]][tempPosition][k]==1) */{ //add all used wavelengths to vector
                        if(!notAvaliable_Vector.contains(k)){
                            notAvaliable_Vector.add(k);
                            if(avaliable_Vector.contains(k)){ //remove the wavelengths used by other path
                                //avaliable_Vector.r
                                avaliable_Vector.remove(k);
                            }
                        }
                    }
                }
                if (avaliable_Vector.size()==0){ //if no wavelength avaliable for any of the paths
                    System.out.println("No avaliable wavelength");
                    return;
                }
                position++;
            }

z gory dzieki

0

Wektor ma dwie różne metody:

remove(int index)
remove(Object o) 

Chcesz wywołać drugą, ale wywołujesz pierwszą.

Linię

avaliable_Vector.remove(k);

zamień na

avaliable_Vector.remove(Integer.valueOf(k));

lub na

avaliable_Vector.remove((Integer) k);

1 użytkowników online, w tym zalogowanych: 0, gości: 1