【问题标题】:Generating 2 values from one method从一种方法生成 2 个值
【发布时间】:2011-09-19 16:44:01
【问题描述】:

我需要能够从输入法的方法中获得 number 和 numberCount 的值。

我正在做的任务是这样的……

设计并实现一个 Java 程序,该程序将收集浮点数并确定输入数据的总和和平均值。程序应该使用单独的方法来输入数据、计算总和、计算平均值和显示结果。应使用标记值来指示用户已完成输入他们的号码。输出应显示一条消息,其中包括输入数字的计数、数字的总和和数字的平均值。如果数字的总和大于 100,则应显示警告消息,指示“值已超过总和 100”。

  1. 其他要求包括:

一个。使用 JOptionPane.showInputDialog() 方法让您的用户输入他们的数据

b.使用 JOptionPane.showMessageDialog() 方法来显示您的消息。

这就是我目前所拥有的......

// Import javax JOptionPane
import javax.swing.JOptionPane;

// Create Class
public class Test {

  // Main Method
  public static void main(String[] args) {

  // Initialize values
  int numberCounter = 0;
  int count;

  double sum = 0;
  double number = 0;
  double average;

  double numberString=0;
  number = readDouble(numberString, number, sum, numberCounter);
  numberCounter = read1Double(numberString, number, sum, numberCounter);

  // Initiate loop if user entered at least one value display average, count, sum
  if ( numberCounter != 0 ) {

   // Promote numberCounter to double and calculate average of all numbers entered
   average = avg(sum, numberCounter);

   // Calculate count
   count = numberCounter;

   // Display average, count and sum.
   JOptionPane.showMessageDialog(null, "Sum of numbers input : " + sum + "\nCount of   
    numbers : " + count + "\nAverage of numbers : " + average);
   }
    // Initiate loop if sum exceeds 100 display message
    if ( sum >= 100 ) {
    JOptionPane.showMessageDialog(null, "The sum of inputed numbers exceeds 100!");
    }
  }

  // Average Method
  private static double avg(double s, double c) {
  return (s/c);
  }

  // Sum Method
  private static double sum(double s, double c) {
  return (s+c);
  }

  // Input Method
  private static double readDouble(double i, double number, double sum, int numberCounter) {

    // Acquire first number from user
    String numberString;
    numberString = JOptionPane.showInputDialog(
    "Enter integer number :" );
    number = Double.parseDouble( numberString );

      // Initiate loop until stopped by user by using sentinel value of -1
      while ( number != -1 ) {
      sum = sum(sum, number);
      numberCounter = numberCounter + 1;

      // Acquire the remaining numbers from user until stopped
      numberString = JOptionPane.showInputDialog(
      "Enter integer number or -1 if no more numbers to insert :" );
      number = Double.parseDouble( numberString );
      }
    return number;   
  }
  }
}

非常感谢您的回复,但我可以举个例子来说明如何在我的脚本中使用它吗?我很困惑,睡得很少,最后一天的一切都是这个任务,我很煎熬。哈哈 Java 肯定会让你失望。

是的,它不起作用,但我需要主方法中输入法的值,因此输出数据是正确的。

我的班级还没有做数组,所以我的老师期望的不是数组。

【问题讨论】:

  • 有什么问题?希望您能说“它不起作用”以外的其他内容。
  • @user951376:我们不会做你的功课。你应该解耦。首先收集用户输入,然后执行计算,然后显示结果,包括警告。
  • 如果我似乎在要求别人做我的作业,我深表歉意。我自己做没有问题,我只是卡住了,需要帮助来理解这一点。
  • @user951376:看看我的回答,也许有帮助...

标签: java


【解决方案1】:

虽然,@Puller 的回答是最传统的做法。这一遍又一遍地出现,我建议查看 FunctionalJava 的 P 类集。有 P1-P8 分别包装 1-8 个对象。有一组简单的方法 P.p 可以为您创建合适的 P1-P8 版本。

P Class API

【讨论】:

    【解决方案2】:

    您可以声明包含您必须返回的值的 ad-hoc 类,并使该方法返回对 ad-hoc 对象的引用。

    [inside your class]
    
    public class MyReturnValues {
        public int a;
        public int b;
    }
    
    [...]
    
    MyReturnValues myMethod() { ... }
    

    【讨论】:

    • 我要试试这门课,我只是无法理解我为 a 和 b 输入的内容是我需要的 2 个值吗?以及这个类如何将自己与创建的方法关联起来以获取值并将其按预期的值吐回主类?
    • 是的,a 和 b(以及您可能需要的任何其他变量)是您必须在方法返回时获得的值。从用户的角度来看,它类似于 MyReturnValues mrs = myObject.myMethod(); x = mrs.a; z = mrs.b; 但是我建议您查看 @"John B" 的答案,以便最终解决 Java 中的“多个返回值”问题。
    • 我查看了 John B 的帖子,但我正在尝试阅读他提供的链接中的信息,我可以围绕它,P p 做什么以及它是如何工作的,我拥有的一切到目前为止一直在 JAVA 中做是有道理的,我可以将事情联系在一起,但这超出了我的范围,至于你发布的内容,我不明白 mrs 是什么就像 mrs.a 和 mrs.b,谢谢你的意见。我很感激:)
    • 我在 pastebin 贴了一个完整的例子。希望这可以帮助 :)。 pastedCode
    【解决方案3】:

    输入法不需要计算总和和平均值(这不是它的工作),而只是简单地获取并返回输入。让该方法返回输入的内容(例如一个数组),然后将该数组传递给您的 sum 和 average 方法。

    【讨论】:

    • 我的课还没有遍历数组,我需要找到一个不同的解决方案。还有什么想法吗?感谢您的帮助!
    【解决方案4】:

    尝试将您尝试完成的不同任务分开:

    1. 检索用户输入:double[] inputs = readInput();
    2. 执行计算:double sum = sum(inputs); double avg = avg(inputs);
    3. 显示消息

    这不是一个完美的 OO 解决方案,但它应该涵盖您在问题中列出的所有要求。

    【讨论】:

    • 这是“你的”方法,你必须实现它:-)
    • 哦,好吧,有什么值我必须放在双[]的括号中吗?所以它看起来像 double[] input = readDouble(numberString, number, sum, numberCounter) { ?
    • 不,只要用户没有完成,在readInput 内迭代。然后返回一个包含所有用户输入的数组。
    【解决方案5】:

    你可以这样使用:

    public class TwoTuple<A, B> {
       public final A firstl;
       public final B second;
       public Two Tuple(A a, B b) { first = a; second = b; }
       public String toString() {
          return "(" + first  ", " + second ")";
       }
    }
    

    然后使用上面的类作为你的返回值:

    public class Test {
    
      static TwoTuple<Double, Double> yourMethodName(YourInputs){
         .......
         return new TwoTuple<Double, Double>(YourSumResult, YourAverageResult);
      }
      public static void main(String[] args) {
        TwoTuple<Double, Double> result = yourMethodName(YourInputs);
        System.out.println(result);
      }
    }
    

    【讨论】:

    • 在 public static TwoTuple readDouble(numberString, number, sum, numberCounter) { line.有什么想法吗?
    • 您是否在单独的文件中定义“public class TwoTuple”并在测试类中使用它?
    • 哦不,我没有,所以我创建了一个名为 TwoTuple 的新 .java,定义它。保存并编译它以使其工作?
    • 是的,和test.java放在同一个包里
    • 我无法编译 TwoTuple 类,它在 public Two Tuple(A a, B b) { first = a, second = b; 上出错} 字符串表示应该有一个 ;在第一个 = a 之后。然后它会在返回字符串上出错,期望一些;也。有什么想法吗?
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 2012-07-07
    • 2019-02-18
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多