[英]How to return values without using multiple returns
我正在构建一个程序,我们特别不允许在子模块中使用多个返回。
我想知道如何从子模块areaCalc
传递jimArea
, ashtynArea
和steveArea
,以便它们可以在main中使用。 这是我所指的子模块,后面是完整的代码。
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;
}
}
非常感谢任何帮助,谢谢。 约翰
这里最快的修复可能只是返回一组区域。 例如,您可以返回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
}
返回对象或数据结构。 新程序员倾向于在原语方面考虑太多。 您需要将它们组合成对象。
这段代码甚至可以编译吗?
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));
轻松添加更多或按名称查找。
另一个选择是返回一个包含所有值的数组。 但我怀疑这会解决你所有的问题,正如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;
}
解决方案是使用dto - 数据传输对象:type来包装多个对象:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.