2017-09-12 1 views
-1
int currentPoint = 2; 
    int direction = 1; 
    PVector copyOf(PVector p){ 
     return new PVector(p.x, p.y); 
    } 

    void addPoint() { 

     hull.add(points.get(currentPoint)); 

    // look at the turn direction in the last three points 
    // (we have to work with copies of the points because Java) 
     p1 = copyOf(hull.get(hull.size() - 3)); 
     p2 = copyOf(hull.get(hull.size() - 2)); 
     p3 = copyOf(hull.get(hull.size() - 1)); 


     while (!crossprod (p1, p2, p3) && hull.size() > 2) { 
    // if crossproduct is <= 0, then remove the middle point 
    // if crossproduct is >= 0, do nothing because we have add the point before 
      hull.remove(hull.size() - 2); 
      if (hull.size() >= 3) { 
    //in case of null pointer error 
       p1 = copyOf(hull.get(hull.size() - 3)); 
      } 
      p2 = copyOf(hull.get(hull.size() - 2)); 
      p3 = copyOf(hull.get(hull.size() - 1)); 
     } 
    //you'll see information in the console 
     println("currentPoint: " + currentPoint + " numPoints: " + points.size() + " hullSize: " + hull.size()+" direction:"+direction); 
     if (currentPoint == points.size() -1 || currentPoint == 0) { 
    //when direction = 1, it's a traversal of all points with O(n) 
    //when direction = -1, the construction of convex hull began which is O(nlogn) 
      direction = direction * -1; 
      if (currentPoint == 0){ 
    /****add code here*****/ 
      } 
     } 

     currentPoint+= direction; 
    } 

Il est assez difficile d'expliquer clairement ma question sans code. Je veux ajouter du code de sorte que quand currentPoint = 0, il quittera la fonction addpoint(). exit() ne fonctionnera pas, car il quittera tout le programme et l'animation déjà jouée disparaîtra. Je ne peux pas trouver de bonne solution à cela, est-ce que quelqu'un a des idées à ce sujet?Je travaille sur un projet de coque convexe en utilisant processing3, quelqu'un pourrait-il me dire s'il y a toujours moyen de quitter une fonction (pas tout le programme)?

+0

ajouter un 'retour,' ..that doit travailler (sans regarder le reste de votre mise en œuvre). – nullpointer

+0

plus d'infos http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html – nullpointer

+1

Dans le futur, essayez de mettre un [mcve] à la place de votre programme entier. Un programme simple est beaucoup plus facile à déboguer. Essayez également d'utiliser un formatage correct, car votre code est très difficile à lire. –

Répondre

1

De the reference:

Le mot-clé return peut également être utilisé pour sortir d'une fonction, ne permettant pas au programme de la déclarations restantes.

void draw() { 
    background(204); 
    line(0, 0, width, height); 
    if (mousePressed) { 
    return; // Break out of draw(), skipping the line statement below 
    } 
    line(0, height, width, 0); // Executed only if mouse is not pressed 
} 

Donc dans votre cas:

Je veux ajouter un code de sorte que lorsque currentPoint = 0, il quitte la fonction addPoint().

if(currentPoint == 0){ 
    return; 
} 

un pas en arrière, vous devriez vraiment prendre l'habitude de faire des recherches. Une recherche rapide Google de "java quitter la fonction" retourne un groupe de résultats, y compris: