【问题标题】:Where should scanner go in this program?扫描仪在这个程序中应该放在哪里?
【发布时间】:2014-06-26 11:52:41
【问题描述】:

我正在开发一个程序,该程序接受两个数字的输入,然后进行一些不同的计算。我的 TwoNumbers 类有几种不同的方法来计算总和、距离、平均值等。

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

我知道这真的很基础,但我只学了几个星期的 java,我很难找到应该如何完成/如何让输入与我的实例变量和 firstNumber 相关联秒数

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;
}
}

【问题讨论】:

  • 您没有firstNumbersecondNumber 的访问器。此时,您正在使用 mainScanner 所在的位置)中的反射来补充这些字段。

标签: java


【解决方案1】:

每个班级都应遵循single responsibility principle。您的 TwoNumbers 类应该只使用 double 数字并对它们执行操作,仅此而已。为这个类提供double的数字应该在客户端,并且提供数字的能力,这意味着客户端可以定义Scanner或其他方式来提供数据。

【讨论】:

    【解决方案2】:

    您显示的类,即 TwoNumbers 类,应该没有用户输入,因为它应该封装两个数字和两个数字的概念。它的编写方式应使其可以与扫描程序或 GUI 程序一起使用,而无需更改它。因此,UI 应该在 main 或其他类中。

    【讨论】:

      【解决方案3】:

      您可能希望为该类创建一个构造函数,并在构造函数中传递您想要的变量。这意味着您可以从其他地方获取输入,即主要方法或其他方式。

      public TwoNumbers(double num1, double num2){
      
          firstNumber = num1;
          secondNumber = num2;
      
      }
      

      【讨论】:

        【解决方案4】:
        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();
            }
        

        之后你需要做的就是调用你想要传递数字的方法。

        【讨论】:

          【解决方案5】:

          你需要在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
              }
          

          【讨论】:

            【解决方案6】:

            如果您将扫描仪放在主类或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;
                    }
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-21
              • 1970-01-01
              相关资源
              最近更新 更多