2016-07-28 12 views
0

Ich erstelle ein Objekt mit den gleichen Parametern mehrmals hintereinander. Das Objekt hat eine zufällige Methode (mit Math.random()) darin, von der ich weiß, dass sie jedes Mal eine andere Zahl zurückgeben sollte, aber jedes Mal innerhalb des Programms erzeuge ich ein neues Objekt dieser Klasse und rufe die Methode auf, die es zurückgibt der gleiche Wert. Wie soll ich das beheben?Die Zufallszahl kann nicht jedes Mal generiert werden, wenn das Objekt erstellt wird

Ort, an dem ich die Methode Vertrag nennen:

for (int i = 0; i < 212000; i++){ 
      Contractions c = new Contractions(a, b); 
      temp = c.contract(); 
      if (temp < min){ 
       min = temp; 
      } 
      if (i%1000 == 0){ 
       System.out.println(min); 
      } 
     } 

Methode:

while (vertices.size() > 2){ 
     Edge randEdge = edges.get((int) (Math.random()*edges.size())); 
     vertices.remove(randEdge.getTwo()); 
     for (int i = edges.size() - 1; i >= 0; i--){ 
      if (edges.get(i).getOne() == randEdge.getTwo()){ 
       edges.get(i).setOne(randEdge.getOne()); 
      } 
      if (edges.get(i).getTwo() == randEdge.getTwo()){ 
       edges.get(i).setTwo(randEdge.getOne()); 
      } 
     } 
     edges.remove(randEdge); 
     removeSelfLoops(); 

return edges.size(); 

Kantenklasse:

package Contractions; 

public class Edge { 
    Vertex one; 
    Vertex two; 
    public Edge(Vertex one, Vertex two){ 
     this.one = one; 
     this.two = two; 
    } 
    public boolean isEqual(Edge other){ 
     if (other.one == this.one && other.two == this.two){ 
      return true; 
     } 
     if (other.two == this.one && other.one == this.two){ 
      return true; 
     } 
     return false; 
    } 
    public Vertex getOne(){ 
     return one; 
    } 
    public Vertex getTwo(){ 
     return two; 
    } 
    public void setOne (Vertex v){ 
     one = v; 
    } 
    public void setTwo (Vertex v){ 
     two = v; 
    } 
    public String toString(){ 
     return one + "; " + two; 
    } 
} 
+2

einige code vielleicht? – Damiano

+1

Fügen Sie ein [mcve] ein. – erickson

+0

Wir müssen mehr von Ihrer 'Edge' Klasse sehen, um dieses zu debuggen –

Antwort

0

soweit ich das beurteilen kann, Sie kehren edges.size() nicht . Angenommen, Sie ändern das Kanten-Array nicht, erhalten Sie immer das Gleiche zurück.

+0

Entschuldigung, ich habe den Teil nicht eingeschlossen, wo ich Randkante vom Array entferne und mehr. Lassen Sie mich das auch einschließen – kmindspark

+0

könnte ich die Methode sehen, die dem Array zusätzliche Kanten hinzufügt? –

1

Versuchen Sie, Java Random mit seiner nextInt(int bound) Methode zu verwenden. Die Grenze sei die Länge der Liste, die die Kanten enthält. Dies wird eine zufällige Ganzzahl zwischen 0 einschließlich und exklusiv gebunden zurückgeben.

Die von Ihnen verwendete Methode gibt nun eine Zahl zwischen 0 einschließlich und 1 exklusiv zurück. Dann werfen Sie das Ergebnis auf eine int. Es ist wahrscheinlich, dass Sie aufgrund des Generators, den Sie verwenden, nicht die Art von Verteilung erhalten, die Sie erwarten.

Verwandte Themen