2014-06-26 63 views
3

我正在开发一个程序,它接受两个数字的输入,然后进行一些不同的计算。我有我的TwoNumbers类与几种不同的方法来计算总和,距离,平均等。扫描仪应该在这个程序中去哪里?

我应该把扫描仪放在这个类,还是我应该把它放在Main方法?

我知道这是非常基本的,但我一直在学习Java几个星期,我很难找到这应该怎么做/如何获得输入关联到我的实例变量和firstNumber和secondNumber

public class TwoNumbers{ 

private double firstNumber; 
private double secondNumber; 

public double getSum() 
{ 
    double sum = firstNumber + secondNumber; 
    return sum; 
} 

public double getDifference() 
{ 
    double difference = firstNumber - secondNumber; 
    return difference; 
} 

public double getProduct() 
{ 
    double product = firstNumber - secondNumber; 
    return product; 
} 

public double getAverage() 
{ 
    double average = (firstNumber + secondNumber)/2; 
    return average; 
} 

public double getDistance() 
{ 
    double distance = Math.abs(firstNumber - secondNumber); 
    return distance; 
} 

public double getMax() 
{ 
    double maximum = Math.max(firstNumber, secondNumber); 
    return maximum; 
} 

public double getMin() 
{ 
    double minimum = Math.min(firstNumber, secondNumber); 
    return minimum; 
} 
} 
+0

您没有'firstNumber'和'secondNumber'的存取器。此时,您正在'main'(其中'Scanner'将存在)中使用反射来保存这些字段。 – Makoto

回答

1

您显示的类TwoNumbers类应该没有用户输入,因为它应该封装两个数字和两个数字的概念。它的编写方式应使其可以与Scanner程序或GUI程序一起使用,而不必更改它。因此UI应该在主要或另一个类中。

4

每个班级都应遵循single responsibility principle。您的TwoNumbers课程只能与double号码一起使用并对其执行操作,仅此而已。为这个类别提供double号码应该在客户端,并且能够提供号码,这意味着客户端可以定义Scanner或另一种提供数据的方式。

1

您可能想要为类构造一个构造函数,并在构造函数中传递所需的变量。这意味着你从其他地方获得输入,IE是主要方法或其他方式。

public TwoNumbers(double num1, double num2){ 

    firstNumber = num1; 
    secondNumber = num2; 

} 
1
For example: 
public double getSum(firstnumber, secondnumber) // <-- you need pass in the value 
{ 
    double sum = firstNumber + secondNumber; 
    return sum; 
} 
/* 
* somewhere in the main or another method you can delare the first number/2nd number 
* for example: 
*/ 
public void static main (String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("enter first number"); 
    firstnumber = input.nextInt(); 
    System.out.println("enter first number"); 
    secondnumber = input.nextInt(); 
    } 

后,所有你需要做的就是打电话给你想传递给数的方法。

1

您必须TwoNumbers构造函数:在一些其他类

public class TwoNumbers { 

    private double firstNumber; 
    private double secondNumber; 

    public TwoNumbers(double firstNumber, double secondNumber){ 
     this.firstNumber = firstNumber; 
     this.secondNumber = secondNumber; 
    } 
} 

然后,你可以有你的扫描仪:

public static void main(String[] args) { 

     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter firstNumber"); 
     double firstNumber = scanner.nextDouble(); 
     System.out.println("Enter secondNumber"); 
     double secondNumber = scanner.nextDouble(); 

     TwoNumbers obj = new TwoNumbers(firstNumber, secondNumber); 

     //Call methods from TwoNumbers 
    } 
1

真的,如果你把扫描仪的代码会工作主类或TwoNumbers类。这样做的最佳做法是将您的扫描仪和任何其他输入/输出代码放在您的主类中,并将处理/计算代码放在另一个类中。您选择的哪一个将基于您的应用程序,但大多数情况下您将在主类中安装扫描仪。所以...

public class Driver { 
    public static void main(String[] args){ 
     Scanner in = new Scanner(System.in); 
     String s; 
     while((s = in.nextLine()) != "stop"){ 
      TwoNumbers.sum(Double.parseDouble(s.split(" ")[0]), Double.parseDouble(s.split(" ")[1])); 
     } 
     in.close(); 
    } 
} 

public class TwoNumbers{ 
     public static double sum(double a, double b){ 
      return a+b; 
     } 
    } 
}