【问题标题】:Java Interaction not returningJava 交互不返回
【发布时间】:2021-02-12 23:57:48
【问题描述】:

我正在用 Java 编写代码,为变量 a、b、c 和一个计算椭圆体尺寸的标签输入数字。键入 Ellipsoid ex1 = new Ellipsoid ("Ex 1", 1, 2, 3);应该在交互中给我以下内容:

Ellipsoid "Ex 1" with axes a = 1.0, b = 2.0, c = 3.0 units has:
 volume = 25.1327 cubic units
 surface area = 48.9366 square units

但它什么也没给我。它是空白的。我怀疑底部的最后一个 return 语句编码错误,但我无法弄清楚我到底做错了什么。

import java.text.DecimalFormat;
import java.util.Scanner;

public class Ellipsoid {

   private String label = " ";
   private double a = 0;
   private double b = 0;
   private double c = 0;

   public Ellipsoid(String labelIn, double aIn, double bIn, double cIn) { 
      setLabel(labelIn);
      setA(aIn);
      setB(aIn);
      setC(cIn);
   }
   
   public String getLabel() {
      return label;
   }
   
   public boolean setLabel(String labelIn) {
      if(label != null) {
         this.label = label.trim();
         return true;
      }
         
      else {
         return false;
      }
   }
   
   public double getA() {
      return a;
   }
   
   public boolean setA(double aIn) {
      if(a > 0) { 
         this.a = a;
         return true;
      }
      else {
         return false;  
      }
   }
   
   public double getB(){
      return b;
   }
   
   public boolean setB(double bIn) {
      if (b > 0) {
         this.b = b;
         return true;
      }
         
      else {
         return false;
      }
   }
   
   public double getC() {
      return c;
   }
   
   public boolean setC(double cIn) {
      if(c > 0) {
         this.c = c;
         return true;
      }
      
      else {
         return false;
      }
   }
  
   public double volume() {
      return (4 * Math.PI * a * b * c) / 3;
   }
   
   public double surfaceArea() {
      double surfaceAreaDouble = (Math.pow((a * b), 1.6) + Math.pow((a * c), 1.6) + Math.pow((b * c), (1 / 1.6)) / 3);
      surfaceAreaDouble = 4 * Math.PI * Math.pow(surfaceAreaDouble, (1 / 1.6));
      return surfaceAreaDouble;
   }
   
   public String toString() {
      DecimalFormat decimalFormat = new DecimalFormat("#,##0.0###");
      
      return "Ellipsoid \"" + label + "\" with axes a = " + getA() + ", b = " + getB() + ", c = " +getC() + " units has:\n volume = " + decimalFormat.format(volume()) + " square units" + "\n surface area = " + decimalFormat.format(surfaceArea()) + " cubic units";
   }
  
}

【问题讨论】:

  • 您建议的代码Ellipsoid ex1 = new Ellipsoid ("Ex 1", 1, 2, 3); 只是创建了一个Ellipsoid 类型的对象并将其分配给变量ex1。它没有更多,也没有更少。如果你想在控制台上打印一些东西,你必须告诉它这样做。如果你想打印ex1toString()方法的返回值,你可以在下一行调用System.out.println(ex1);
  • 那么通过“输入”,你在哪里输入这个?你能给我们看一下代码吗?还是说 REPL 之类的意思?
  • 请包含一个执行此操作的主要方法。
  • 在 Google 上快速搜索“Java Interations”后,我发现自己位于a tutorial for using an "Interactions pane" in DrJava。如果这是您正在使用的,本教程将在第二个要点中介绍这一点。您只需输入ex1.toString();
  • 您的setA 方法从不实际使用它的参数。你从不使用aIn

标签: java return interaction


【解决方案1】:

查看您的代码后,我注意到以下问题:

  1. 在您的 setter 方法中,您没有使用正确的变量。您应该在所有设置器中使用方法参数。

示例:

public boolean setA(double aIn) {
      if(a > 0) {            // a should be aIn here
         this.a = a;              // = a should be = aIn
         return true;
      }
      else {
         return false;  
      }
   }
  1. surfaceArea()方法有个小错误:

    (Math.pow((a * b), 1.6) + Math.pow((a * c), 1.6) + Math.pow((b * c), (1 / 1.6)) / 3);

最后一个不需要“1/ 1.6”部分,而像其他部分一样只需要“1.6”,然后在将它们除以 3 之前,您需要为所有 3 个 math.pow 提供另一个括号。(也切换“cubic”和“方”字匹配体积和表面正确)

在这些修复之后,制作一个 Ellipsoid 类的对象并打印它会得到您正在寻找的输出:

public static void main(String[] args) {

    Ellipsoid ex1 = new Ellipsoid ("Ex 1", 1, 2, 3);

    System.out.println(ex1);
}

输出:

Ellipsoid "Ex 1" with axes a = 1.0, b = 2.0, c = 3.0 units has:
volume = 25.1327 cubic units
surface area = 48.9366 square units

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多