2017-11-25 85 views
-1

因此我有一个学校项目,需要我编写代​​码并实现方法来证明用户输入的3个坐标集合将是某个三角形。代码主外部距离我的3分

我试图写一行代码来获得我的3点P1,P2,P3之间的距离。我不知道我是如何参考我建立的坐标,如x1,x2,x3,y1,y2,y3。 这里是我的代码:

import javax.swing.JOptionPane; 

public class EpsteinProj3 
{ 
    public static void main (String args[]) 
    { 
    String input1 = JOptionPane.showInputDialog("Enter coordinate A"); 
    String input2 = JOptionPane.showInputDialog("Enter coordinate B"); 
    String input3= JOptionPane.showInputDialog("Enter coordinate C"); 
    System.out.println("Your Triangle is: " + input1 + " " + input2 + " " + input3); 

    //double temp = Double.parseDouble(input1); 
    //System.out.println("" + temp); 

    //double temp1 = Double.parseDouble(input2); 
    //System.out.println("" + temp1); 

    //double temp2 = Double.parseDouble(input3); 
    // System.out.println("" + temp2); 

     Double x1, x2, x3; 
     Double y1, y2, y3; 

     x1 = Double.parseDouble(input1.substring(1, input1.indexOf(","))); 
     y1 = Double.parseDouble(input1.substring(input1.indexOf(",") +1, input1.length()-1)); 
     Point P1 = new Point(x1, y1); 

     x2 = Double.parseDouble(input2.substring(1, input2.indexOf(","))); 
     y2 = Double.parseDouble(input2.substring(input2.indexOf(",") +1, input2.length()-1)); 
     Point P2 = new Point(x2, y2); 

     x3 = Double.parseDouble(input3.substring(1, input3.indexOf(","))); 
     y3 = Double.parseDouble(input3.substring(input3.indexOf(",") +1, input3.length()-1)); 
     Point P3 = new Point(x3, y3); 


     System.out.println("Point A is " + P1.toString()); 
     System.out.println("Point B is " + P2.toString()); 
     System.out.println("Point C is " + P3.toString()); 

     //scalene, isosceles, right 


} 

public static double distanceBetween() 
{ 
    double Dis1 = Math.sqrt((x1-x2)^2 + (y1- y2)^2); 
    Dis1 = Math.sqrt((x1-x2)^2 + (y1- y2)^2); 
} 

} 
+0

什么是确切的错误和堆栈跟踪? – Li357

+0

这是因为括号不是有效数字的一部分。它应该是'input.substring(1,input.indexOf(“,”))''和'input.substring(input.indexOf(“,”)+ 1,input.length - 1)'以排除双方括号。 – Li357

+0

此问题与正在使用的IDE无关。无需添加标签。 –

回答

-2

那是因为你开始从字符串的第一个元素读书。 如果您确信该格式将永远是(POSX,波西),然后

x = Double.parseDouble(input1.substring(1, input1.indexOf(","))); 
    y = Double.parseDouble(input1.substring(input1.indexOf(",") +1, input1.length()-1)); 
+0

最后一个括号如何? – Li357

+0

但是用你的代码替换了我的x和y代码,现在我的错误是:线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“5.0)” –

+0

抱歉,不记得最后一次parentesis。看到我编辑的答案@LionelEpstein – joao86

0

我使用解析点following正则表达式。这允许可选(),后的可选空间。

请注意,此示例使用java.awt.Point,因此您应该将Integer.parseInt替换为Double.parseDouble以实现摆动。

public class StringToPoint { 
private static final Pattern POINT_PATTERN = Pattern.compile("(?:\\()?([0-9]+)?,(?:)?([0-9]+)?(?:\\))?"); 

private static Point parsePoint(String point){ 
    Matcher matcher = POINT_PATTERN.matcher(point); 
    if (!matcher.matches() || matcher.groupCount()!=2){ 
     throw new IllegalArgumentException(String.format("%s cannot be parsed as point",point)); 
    } 
    return new Point(
     Integer.parseInt(matcher.group(1)), 
     Integer.parseInt(matcher.group(2)) 
    ); 
} 

@Test 
public void test(){ 
    TestCase.assertEquals(new Point(123,456), parsePoint("(123,456)")); 
    TestCase.assertEquals(new Point(123,456), parsePoint("(123, 456)")); 
    TestCase.assertEquals(new Point(123,456), parsePoint("123, 456")); 
    TestCase.assertEquals(new Point(123,456), parsePoint("123,456")); 
} 
} 
+0

我欣赏帮助,但它不完全是我在找什么。我试图让我的3点P1,P2和P3之间的距离。我做了一个方法:public static double distanceBetween(Point P1,Point P2)试图获得这两个点之间的距离。但它里面我有双Dis1 = Math.sqrt((x1-x2)^ 2 +(y1-y2)^ 2); Dis1 = Math.sqrt((x1-x2)^ 2 +(y1-y2)^ 2);这是错误的,因为X1和Y1等不被识别 –

+0

不,您编辑的问题要求点之间的距离。原来的问题是关于从字符串解析点。请不要编辑问题以提出另一个问题,而是打开另一个问题。这就是我为什么低估了你的问题。 – Bedla

+0

即时通讯如果我没有遵守规则,我很抱歉。我原本提出了一个新问题,但是这让我在询问第一个问题后等了90分钟。我只是想找到一种方法来增加这个问题。抱歉 –