Java 贾维斯·马奇·阿尔戈不工作。条件总是错误的
通过这个链接,我看到了一个关于礼品包装算法/jarvis march的算法 我试着编码,但它不符合算法。 这是我的主要功能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
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);
*/
}