2014-03-06 103 views
-2

我對此比較陌生,任何幫助都會很棒。對於我的作業,我應該製作一個Triangle和一個TriangleTester類,它使用掃描儀控制值,以找出三角形的邊長,角度,周長等。我不是要求你做我的作業,但也許指向我在正確的方向。這只是一小部分,但它使我無法繼續。當調用方法時,掃描儀輸入不起作用

我想不通的是如何讓變量我遇到方法輸入移動(如果是有道理的

這裏是我的三角代碼:

import java.math.*; 
import java.util.Scanner; 

public class Triangle 
{ 
private double A, B, C, D, h; 
public double x1, x2, x3, y1, y2, y3; 
public double lengthA, lengthB, lengthC; 
private double angleA, angleB, angleC; 
private double calcPerimeter, calcArea, getHeight; 

//Create new Triangle 
public Triangle(){ 
} 

//to get length of a (AB) use A = (x1, y1) & B = (x2,y2) 
public double getLengthC(){ 
double distance = Math.sqrt((Math.pow((x1-x2),2))+(Math.pow((y1-y2),2))); 
return distance; 
} 
} 

這裏是我的TriangleTester代碼:

import java.util.Scanner; 

public class TriangleTester 
{ 
public static void main(String[]args) 
{ 
Triangle triangle1 = new Triangle(); 

Scanner scan = new Scanner(System.in); 
System.out.println("Enter x1 for point A"); 
double x1 = scan.nextDouble(); 
System.out.println("Enter y1 for point A"); 
double y1 = scan.nextDouble(); 
System.out.println("Enter x2 for point A"); 
double x2 = scan.nextDouble(); 
System.out.println("Enter y2 for point A"); 
double y2 = scan.nextDouble(); 
System.out.println("Enter x3 for point A"); 
double x3 = scan.nextDouble(); 
System.out.println("Enter y3 for point A"); 
double y3 = scan.nextDouble(); 
System.out.println("Set up a Triangle with coordinates " +"("+x1+","+y1+")"+ ","+ "("+x2+","+y2+")" +","+ "("+x3+","+y3+")"); 

System.out.println("Length of side c " + triangle1.getLengthC()); 
} 
} 

出於測試目的,我想輸入的值:

0 
0 
4 
0 
3 
3 

並將c的長度計算爲4.我看到,當我在TriangleTester類中使用變量時,變量可以工作,但是當我從我的Triangle類調用某個方法時,這些值不起作用。

從我在哪裏,我覺得我有操縱三角形類,以便從掃描儀輸入我的移動到該區域....或者我可能是錯的

public Triangle(){} //I would have to add something here maybe? 

回答

0

呀你」再右吧。由於您在TriangleTester中獲得用戶輸入,因此您需要將它們傳遞給Triangle類。

public Triangle(double x1, double x2, double x3, double y1, double y2, double y3) { 
    this.x1 = x1; 
    this.x2 = x2; 
    this.x3 = x3; 
    this.y1 = y1; 
    this.y2 = y2; 
    this.y3 = y3; 
} 

而且從用戶得到的值這樣之後創建Triangle對象:

Triangle triangle1 = new Triangle(x1, x2, x3, y1, y2, y3); 
System.out.println("Length of side c " + triangle1.getLengthC()); 

注:這是一個推薦的做法,使你的類的所有實例變量作爲private,並提供適當的獲取者和設置者他們。

+1

非常感謝您 – user3386695

+0

〜我現在只有一個小問題。所以我寫了所有的陳述,但是當我將我的Triangle類中的參數聲明爲double時,我在Triangle triangle1 = new Triangle(x1,x2,x3,y1,y2,y3)上得到一個錯誤。我把它放在掃描儀的下面。 (我猜是因爲x1不是雙倍)。還有一件事我不得不對x1 ... y3做些什麼。我必須在某處添加更多嗎?像Luiggi在下面的帖子中獲取和設置? – user3386695

+0

@ user3386695 - 您已經將答案標記爲已接受。如果你的問題還沒有解決,你爲什麼要這樣做?關於你的問題,你得到的錯誤是什麼?你可以使用我建議的或其他的方式。它是由你決定。就像我說的那樣,你不必爲每一個元素調用setter方法。一切都由建設者照顧。 – SudoRahul

0

問題不是Scanner。你永遠不會填寫你的Triangle triangle1變量中的字段,所以所有的字段都有它們的默認值,即0.0。

只需從變量中填寫您的字段即可。例如:

triangle1.x1 = x1; 
//and on... 

但是,這是一個不好的做法,倒不如宣佈領域private,並使用setter方法作業,或具有接受必要的字段的構造函數。

class Triangle { 
    private double x1, x2, x3, y1, y2, y3; 
    public double getX1() { 
     return this.x1; 
    } 
    public void setX1(double x1) { 
     this.x1 = x1; 
    } 
    //other fields, getters and setters... 
} 

//... 
//in your TriangleTester#main method 
triangle1.setX1(x1); 
//same for other fields... 
-4

試試這個

import java.util.Scanner; 

公共類MainClass {

public static void main(String[] args) { 


    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter x1 for point A"); 
    double x1 = scan.nextDouble(); 
    System.out.println("Enter y1 for point A"); 
    double y1 = scan.nextDouble(); 
    System.out.println("Enter x2 for point A"); 
    double x2 = scan.nextDouble(); 
    System.out.println("Enter y2 for point A"); 
    double y2 = scan.nextDouble(); 
    System.out.println("Enter x3 for point A"); 
    double x3 = scan.nextDouble(); 
    System.out.println("Enter y3 for point A"); 
    double y3 = scan.nextDouble(); 
    System.out.println("Set up a Triangle with coordinates " +"("+x1+","+y1+")"+ ","+ "("+x2+","+y2+")" +","+ "("+x3+","+y3+")"); 

    Triangle triangle1 = new Triangle(x1,x2,y1,y2,x3,y3); 
    System.out.println("Length of side c " + triangle1.getLengthC()); 

} 

}

import java.math.*; 
import java.util.Scanner; 

public class Triangle 
{ 
private double A, B, C, D, h; 
public double x1, x2, x3, y1, y2, y3; 
public double lengthA, lengthB, lengthC; 
private double angleA, angleB, angleC; 
private double calcPerimeter, calcArea, getHeight; 

//Create new Triangle 
public Triangle(double x1,double x2,double y1,double y2,double x3, double y3){ 
    this.x1=x1; 
    this.y1=y1; 
    this.x2=x2; 
    this.y2=y2; 
    this.x3=x3; 
    this.y3=y3; 
} 

//to get length of a (AB) use A = (x1, y1) & B = (x2,y2) 
public double getLengthC(){ 
double distance = Math.sqrt((Math.pow((x1-x2),2))+(Math.pow((y1-y2),2))); 
System.out.println(distance); 
return distance; 
} 
} 
+1

一次創建掃描儀對象是足夠的。 – Rahul

+0

主要問題與'Scanner'的使用無關... –

+0

對不起每個人。剛剛閱讀問題標題,並猜測可能是這個原因! –

0

您還沒有設置您的triangle與你已經從Scanner

這種閱讀是可以做到的構造的一部分值的值:

public Triangle (double x1, double x2, double x3, double y1, double y2, double y3) { 
    this.x1 = x1; 
    this.x2 = x2; 
    this.x3 = x3; 
    this.y1 = y1; 
    this.y2 = y2; 
    this.y3 = y3; 
} 

或者您也可以設置setter方法Traingle類

void setX1 (double x1) 
{ 
    this.x1 = x1; 
} 

etc.