2016-08-23 61 views
2

我正在构建一个程序,我们特别不允许在子模块中使用多个返回。如何在不使用多个返回的情况下返回值

我想知道如何通过jimAreaashtynAreasteveArea从子模块areaCalc,使他们能够在主要使用。这里是我所指的子模块,后面是完整的代码。

public static int areaCalc(double depth, double width, double length) 
{ 
int jimArea = (int)(jimDepth * jimWidth * jimLength); 
int steveArea = (int)(steveDepth * steveWidth * steveLength); 
int ashtynArea = (int)(ashtynDepth * ashtynWidth * ashtynLength); 
} 

这是完整的代码。本来我只是回来了,但事实证明我需要3个领域,所以我不知道如何做到这一点,而不做多次回报。

import java.util.*; 
public class PoolStorageCalculation 
{ 
public static void main(String [] args) 
{ 
Scanner sc = new Scanner(System.in); 
System.out.println("Please enter the Depth of Steve's Pool in Metres."); 
double steveDepth = sc.nextDouble(); 
System.out.println("Please enter the Width of Steve's Pool in Metres."); 
double steveWidth = sc.nextDouble(); 
System.out.println("Please enter the Length of Steve's Pool in Metres."); 
double steveLength = sc.nextDouble(); 
System.out.println("Please enter the Depth of Jim's Pool in Metres."); 
double jimDepth = sc.nextDouble() 
System.out.println("Please enter the Width of Jim's Pool in Metres."); 
double jimWidth = sc.nextDouble(); 
System.out.println("Please enter the Length of Jim's Pool in Metres."); 
double jimLength = sc.nextDouble; 
System.out.println("Please enter the Depth of Ashtyn's Pool in Metres."); 
double ashtynDepth = sc.nextDouble(); 
System.out.println("Please enter the Width of Ashtyn's Pool in Metres."); 
double ashtynWidth = sc.nextDouble(); 
Systemm.out.println("Please enter the Length of Ashtyn's Pool in Metres."); 
double ashtynLength = sc.nextDouble(); 
int area = areaCalc(steveDepth,steveWidth,steveLength,jimDepth,jimWidth,jimLength,ashtynDepth,ashtynLength,ashtynWidth); 
int numRays = rayCalc(steveArea); 
int numSharks = sharkCalc(jimArea); 
int numTurtles = turtleCalc(ashtynArea); 
System.out.println("Steve can store " + numRays + " Sting Rays in his " + steveArea + " Metres Cubed Pool."); 
System.out.println("Jim can store " + numSharks + " Sharks in his " + jimArea + " Metres Cubed Pool."); 
System.out.println("Ashtyn can store " + numTurtles + " Turtles in her " + ashtynArea + " Metres Cubed Pool."); 
} 
public static int areaCalc(double depth, double width, double length) 
{ 
int jimArea = (int)(jimDepth * jimWidth * jimLength); 
int steveArea = (int)(steveDepth * steveWidth * steveLength); 
int ashtynArea = (int)(ashtynDepth * ashtynWidth * ashtynLength); 

return area; 
} 
public static int rayCalc(int steveArea) 
{ 
int numRays = (int)(steveArea * 0.5); 
return numRays; 
} 
public static int sharkCalc(int jimArea) 
{ 
int numSharks = (int)(jimArea * 0.1); 
return numSharks; 
} 
public static int turtleCalc(int ashtynArea) 
{ 
int numTurtles = (int)(ashtynArea * 1.2); 
return numTurtles; 
} 
} 

任何帮助,非常感谢,谢谢。 约翰

+1

将区域计算方法改为只计算一个区域并用不同的输入调用它三次可能是值得考虑的。然后您可以轻松地捕获调用方法中计算的三个区域。 –

+0

@duffymo我了解面向对象,但我们的讲师确实没有教过课程,所以我们打算在没有它的情况下做。 – John

回答

5

这里最快的修复可能只是返回一个集合的区域。例如,你可以返回一个List<Integer>而不是单个int,如:

public static List<Integer> areaCalc(double depth, double width, double length) 
{ 
    // Note: you don't actually use the method parameters in the assignments below. 
    // This is probably a typo. 
    int jimArea = (int)(jimDepth * jimWidth * jimLength); 
    int steveArea = (int)(steveDepth * steveWidth * steveLength); 
    int ashtynArea = (int)(ashtynDepth * ashtynWidth * ashtynLength); 

    List<Integer> areaList = new ArrayList<>(); 
    areaList.add(jimArea); 
    areaList.add(steveArea); 
    areaList.add(ashtynArea); 

    return areaList; 
} 

如果你想获得比这发烧友,那么你可以考虑建立一个善意,善意POJO包装了三倍区的值:

public class AreaClass { 
    private int jimArea; 
    private int steveArea; 
    private int ashtynArea; 

    // constructor, getters and setters 
} 
+0

怎么样地图数据结构? – Vaseph

+0

方法areaCalc的参数未使用。 –

3

返回一个对象或数据结构。新程序员倾向于在原语方面考虑太多。你需要将它们组合成对象。

这段代码是否可以编译?

public static int areaCalc(double depth, double width, double length) 
{ 
int jimArea = (int)(jimDepth * jimWidth * jimLength); 
int steveArea = (int)(steveDepth * steveWidth * steveLength); 
int ashtynArea = (int)(ashtynDepth * ashtynWidth * ashtynLength); 

return area; 
} 

哪里有jimDepth其余定义?我在你的main()方法中看到它们,但它们都不在areaCalc()的范围内。

了解数据结构。事情是这样的:

public class Cube { 
    private final double length; 
    private final double width; 
    private final double depth; 

    public Cube(double l, double w, double d) { 
     // Question: Do negative or zero dimensions make physical sense? 
     // What would you do about them here? 
     // Hint: Programming by contract and preconditions. 
     this.length = l; 
     this.width = w; 
     this.depth = d; 
    } 

    public double volume() { 
     return this.length*this.width*this.depth; 
    } 
} 

现在你可以有多个不同的每个人:

Map<String, Cube> volumes = new HashMap<>(); 
volumes.put("jim", new Cube(1, 2, 3)); 
volumes.put("steve", new Cube(4, 5, 6)); 
volumes.put("ashtyn", new Cube(7, 8, 9)); 

轻松添加更多或名称查找。

-1

的解决方案是使用DTO - 数据传送对象:类型来包装乘法对象:

public static class AreaDto { 
    private int jimArea; 
    private int steveArea; 
    private int ashtynArea; 

    public AreaDto(int jimArea, int steveArea, int ashtynArea) { 
     this.jimArea = jimArea; 
     this.steveArea = steveArea; 
     this.ashtynArea = ashtynArea; 
    } 

    public int getJimArea() { 
     return this.jimArea; 
    } 

    public int getSteveArea() { 
     return this.steveArea; 
    } 

    public int getAshtynArea() { 
     return this.ashtynArea; 
    } 
} 

public static AreaDto areaCalc(int steveDepth, int steveWidth, int steveLength, int jimDepth, int jimWidth, int jimLength, int ashtynDepth, int ashtynLength, int ashtynWidth) 
{ 
    int jimArea = (int)(jimDepth * jimWidth * jimLength); 
    int steveArea = (int)(steveDepth * steveWidth * steveLength); 
    int ashtynArea = (int)(ashtynDepth * ashtynWidth * ashtynLength); 

    return new AreaDto(jimArea, steveArea, ashtynArea); 
} 
+0

DTO是一种J2EE反模式。 – duffymo

+0

duffymo,抱歉,但我不同意在这里DTO是反模式。总的来说,它可能是,但不是在这里。如果你想要,你可以命名为'AreaResult',并删除'DTO'。但它解决了任务。 –

0

另外一个选择是返回一个数组保持所有的值。但我怀疑这会解决你的所有问题,正如duffymo在他的回答中指出的那样。

public static int[] areaCalc(double depth, double width, double length) 
{ 
int jimArea = (int)(jimDepth * jimWidth * jimLength); 
int steveArea = (int)(steveDepth * steveWidth * steveLength); 
int ashtynArea = (int)(ashtynDepth * ashtynWidth * ashtynLength); 
int[] area = {jimArea,steveArea,ashtynArea}; 

return area; 
} 
相关问题