【问题标题】:how to call on a method outside of the main method in java如何在java中调用main方法之外的方法
【发布时间】:2014-03-05 17:44:09
【问题描述】:

我有一个除平均方法之外的方法。在正文的最后,我调用了该平均方法。我不了解正确的方法 1.在这个程序中使用我用其他方法声明的变量。例如在 calculate_average 方法中定义的总和。 要么 在 main 方法中定义的总和。

请给我看看

  1. 如何在主方法内外交换变量。在非主要方法之间可互换。

  2. 调用 main in main 之外的方法来计算平均值。

这是我当前的代码。

import java.util.ArrayList;
import java.util.Scanner;

class programTwo
{

    private static Double calculate_average( ArrayList<Double> myArr )
    {
        Double Sum = 0.0;
        for (Double number: myArr)
        {
            Sum += number;
        }

    }

    public static void main( String[] args )
    {
        Scanner scan = new Scanner(System.in);
        ArrayList<Double> myArr = new ArrayList<Double>();
        double Sum = 0;
        int count = 0;
        System.out.println("Enter a number to be averaged, repeat up to 20 times:");
        String inputs = scan.nextLine();

    while (!inputs.matches("[qQ]") )
    {

        if (count == 20)
        {
            System.out.println("You entered more than 20 numbers, you suck!");
            break;
        }

        Scanner scan2 = new Scanner(inputs); // create a new scanner out of our single line of input
        myArr.add(scan2.nextDouble());
        count += 1;
        System.out.println("Please enter another number or press Q for your average");

        inputs = scan.nextLine();
    }
    Double average = calculate_average(myArr);
    System.out.println("Your average is: " + average);

    return Sum / myArr.size();

}}

【问题讨论】:

  • 将 calculate_average 方法设为静态
  • @Neil 不是已经了吗?
  • 我不清楚你的目标。
  • 嘿,看那里 - 不知道为什么我第一次没有看到它......
  • 我只是要编辑我的评论。我不知道你的实际问题是什么。

标签: java methods main


【解决方案1】:

我认为你有静态方法, 所以你可以直接使用 className.MethodName 调用它们。

只需将您的方法声明为公开,您也可以在外部调用它们。

 programTwo.calculate_average(myArr)

无需为调用静态方法创建对象。

【讨论】:

    【解决方案2】:

    main 末尾有这个:

    return Sum / myArr.size();
    

    你需要把它移到calculate_average:

    private static Double calculate_average( ArrayList<Double> myArr )
    {
        Double Sum = 0.0;
        for (Double number: myArr)
        {
            Sum += number;
        }
    
        return Sum / myArr.size();
    }
    

    鉴于mainvoid,即使不是,平均作为退出代码也没有任何意义,我假设这是某种印刷错误。

    一些代码审查

    • 局部变量应该以小写字母开头。所以sum,而不是Sum
    • 您可以使用原语double 代替Double 对象。使用该对象将导致装箱/拆箱开销。
    • 将您的 while 循环及其内容再缩进四个空格,这样循环开头就与上面的代码垂直对齐,因为它位于同一块(方法的块)中​​。
    • 将最后两个大括号分成单独的行
    • 将最后两个大括号与匹配的左大括号垂直对齐
    • 您已经从创建calculate_average 方法开始,但继续拆分main。它太长了。那里发生的事情太多了。
    • if (count == 20) 更改为if (count &gt;= 20)。那就更难搞砸了。

    【讨论】:

      【解决方案3】:

      除了您的calculate_average 方法中缺少return 语句之外,我看不出您的代码有什么问题。

      此外,如果您将方法命名为 calculate_average,它应该返回 average 而不是 sum

      试试这个:

      private static Double calculate_average( ArrayList<Double> myArr )
      {
          Double sum = 0.0;
          for (Double number: myArr)
          {
              sum += number;
          }
          return sum/myArr.size(); // added return statement
      }
      

      【讨论】:

      • 但它除以数组的总和而是数组的大小以求平均值。这是一个不好的方法吗?
      • 是的。这不好。要么调用方法getSum() 并返回总和,要么调用它getAverage() 并返回平均值。方法名称与其行为不一致会导致混乱和错误。您可以考虑使用平均方法调用的求和方法。
      猜你喜欢
      • 2012-06-25
      • 2021-03-30
      • 2012-09-28
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多