Java 贾维斯·马奇·阿尔戈不工作。条件总是错误的

Java 贾维斯·马奇·阿尔戈不工作。条件总是错误的,java,Java,通过这个链接,我看到了一个关于礼品包装算法/jarvis march的算法 我试着编码,但它不符合算法。 这是我的主要功能 import java.util.Random; import java.util.Scanner; public class driver { static Point[] points; static Scanner scan = new Scanner(System.in); static Random rand = new Random

通过这个链接,我看到了一个关于礼品包装算法/jarvis march的算法

我试着编码,但它不符合算法。 这是我的主要功能

import java.util.Random;
import java.util.Scanner;


public class driver {
    static Point[] points;
    static Scanner scan = new Scanner(System.in);
    static Random rand = new Random();
    public static void main (String[] args) 
    {

        System.out.println("Jarvis Algorithm Test\n");
        boolean i = true;

       while(i){
           System.out.println("SELECT:");
           System.out.println("RANDOM:");
           System.out.println("USER INPUT:");
           System.out.print(":");
         //  String comm = scan.nextLine();
          String comm = "random";
           comm = comm.toLowerCase();



          if(comm.equals("random")){
                randomize();
                i = false;
                 }
             else if(comm.equals("user input")){
                userinput();
             }
             else{
                System.out.println("INVALID");
             }
         System.out.println("");
       }

        Jarvis j = new Jarvis(); 
        j.convexHull(points);   


    }

    public static void randomize(){

    int p = 10; //= askpoints();
        points = new Point[p];
        for(int i = 0; i<p; i++){
              points[i] = new Point();
              points[i].x = rand.nextInt(300) + 20  ;
              points[i].y = rand.nextInt(300) + 20 ;
              System.out.println(points[i].x+ " " +points[i].y);

        }
    }

    public static void userinput(){
        int n = askpoints();
        points = new Point[n];
        System.out.println("Enter "+ n +" x, y cordinates");
        for (int i = 0; i < n; i++)
        {
            points[i] = new Point();
            points[i].x = scan.nextInt();
            points[i].y = scan.nextInt();
        }        
    }

    public static int askpoints(){
        System.out.print("how many points:");
        int i = scan.nextInt();
        return i;
    }




}
import java.util.Random;
导入java.util.Scanner;
公务舱司机{
静态点[]点;
静态扫描仪扫描=新扫描仪(System.in);
静态随机兰德=新随机();
公共静态void main(字符串[]args)
{
System.out.println(“Jarvis算法测试”);
布尔i=真;
而(i){
System.out.println(“选择:”);
System.out.println(“随机:”);
System.out.println(“用户输入:”);
系统输出打印(“:”);
//String comm=scan.nextLine();
字符串comm=“随机”;
comm=comm.toLowerCase();
if(comm.equals(“random”)){
随机化();
i=假;
}
else if(comm.equals(“用户输入”)){
用户输入();
}
否则{
System.out.println(“无效”);
}
System.out.println(“”);
}
Jarvis j=新的Jarvis();
j、 凸形(点);
}
公共静态void randomize(){
int p=10;/=askpoints();
点=新点[p];
对于(int i=0;i=0)
//返回false;
//返回true;
回报率(q.y-p.y)*(r.x-p.x)<(r.y-p.y)*(q.y-p.x);
}
公共空隙凸出(点[]点){
int n=点长度;
int[]next=新的int[n];
int[]prev=新的int[n];
数组。填充(下一步,-1);
int l=0;
对于(int i=1;i
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Arrays;

import javax.swing.JFrame;

/** Class point **/
class Point
{
    int x, y;
}

/** Class Jarvis **/
public class Jarvis extends JFrame{    
    public ArrayList<Integer> x = new ArrayList<Integer>();
    public ArrayList<Integer> y = new ArrayList<Integer>();


    private boolean CCW(Point p, Point q, Point r)
    {
 //     int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);

     //    if (val >= 0)
   //          return false;
    //  return true;
        return (q.y - p.y) * (r.x - p.x) < (r.y - p.y) * (q.y - p.x);
    }

    public void convexHull(Point[] points){
        int n = points.length;

        int[] next = new int[n];
        int[] prev = new int[n];
        Arrays.fill(next, -1);
        int l = 0;
        for(int i =1; i<n;i++){
            if(points[i].x < points[l].x){
                l = i;
            }
        }
        System.out.println(points[l].x);

        int p = l;
        int q;
        do{
                q = p + 1;
                    for(int i = 0;i<n;i++){
                        System.out.println(CCW(points[p],points[i],points[q]));
                        if( p!=i &&CCW(points[p],points[i],points[q])){

                            q = i;

                        }

                        next[p] = q;
                        prev[q] = p;
                        p = q;
                    }
        }while(p == l);






    }
    /*
     *   display(points, next);

    */


}