遇到java类方法的问题

时间:2012-03-13 20:46:12

标签: java

好吧所以我的作业我应该写一个类来存储用户给出的温度并用设定的参数检查它,看看Ethy / Oxygen / Water是冷冻还是沸腾然后在最后显示它哪些将在他们进入的温度下冷冻/沸腾。我已经完成了类和测试器的大部分工作,但是我的代码上出现了几个错误。我不是要求任何人给我答案,但如果你能告诉我我做错了什么,我会非常感激。这是我的课程代码:

public class FreezingBoilingPoints {

    private int temperature;

    public FreezingBoilingPoints(int temp) {
        temperature = temp;
    }

    public void setTemperature(int temp) {
        temperature = temp;
    }

    public int getTemperature() {
        return temperature;
    }

    private Boolean isEthylFreezing(int temperature) {
        if (temperature <= -173) {
            return true;
        } else {
            return false;
        }
    }

    private Boolean isEthylBoiling(int temperature) {
        if (temperature >= 172) {
            return true;
        } else {
            return false;
        }
    }

    private Boolean isOxygenFreezing(int temperature) {
        if (temperature <= -362) {
            return true;
        } else {
            return false;
        }
    }

    private Boolean isOxygenBoiling(int temperature) {
        if (temperature >= -306) {
            return true;
        } else {
            return false;
        }
    }

    private Boolean isWaterFreezing(int temperature) {
        if (temperature <= 32) {
            return true;
        } else {
            return false;
        }
    }

    private Boolean isWaterBoiling(int temperature) {
        if (temperature >= 212) {
            return true;
        } else {
            return false;
        }
    }

    public String showTempinfo() {
        if (isEthylFreezing()) {
            System.out.println("Ethyl will freeze");
        }

        if (isEthylBoiling()) {
            System.out.println("Etheyl will boil");
        }

        if (isOxygenFreezing()) {
            System.out.println("Oxygen will freeze");
        }

        if (isOxygenBoiling()) {
            System.out.println("Oxygen will Boil");
        }

        if (isWaterFreezing()) {
            System.out.println("Water will freeze");
        }

        if (isWaterBoiling()) {
            System.out.println("Water will boil");
        }
    }
}

我的测试人员的代码如下:

import java.util.Scanner;

public class FreezingBoilingTester {
    public static void main(String[] args) {
        int temperature;

        FreezingBoilingPoints temp1 = new FreezingBoilingPoints(0);

        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter a temperature: ");
        temperature = scan.nextInt();

        System.out.println(showTempinfo());
    }
}

7 个答案:

答案 0 :(得分:1)

1)不要传递temp inside方法,因为你已经在成员变量中有了这个值。

2)你可以改变if(条件)然后将true改为false而返回(条件)并且它将是相同的结果,只是为了便于阅读。

3)在需要包装器之前,应该返回boolean not Boolean wrapper。

public final class FreezingBoilingPoints {

    private int temperature;

    public FreezingBoilingPoints(int temp) {
        temperature = temp;
    }

    public void setTemperature(int temp) {
        temperature = temp;
    }

    public int getTemperature() {
        return temperature;
    }

    private boolean isEthylFreezing() {
        return (temperature <= -173);
    }

    private boolean isEthylBoiling() {
        return  (temperature >= 172);
    }

    private boolean isOxygenFreezing() {
        return (temperature <= -362);
    }

    private boolean isOxygenBoiling() {
        return (temperature >= -306);
    }

    private boolean isWaterFreezing() {
        return (temperature <= 32) ;
    }

    private boolean isWaterBoiling() {
        return (temperature >= 212);
    }

    public String showTempinfo() {
        StringBuilder result = new StringBuilder();

        if (isEthylFreezing()) {
            result.append("Ethyl will freeze");
            result.append("\n");
        }

        if (isEthylBoiling()) {
            result.append("Etheyl will boil");
            result.append("\n");
        }

        if (isOxygenFreezing()) {
            result.append("Oxygen will freeze");
            result.append("\n");
        }

        if (isOxygenBoiling()) {
            result.append("Oxygen will Boil");
            result.append("\n");
        }

        if (isWaterFreezing()) {
            result.append("Water will freeze");
            result.append("\n");
        }

        if (isWaterBoiling()) {
            result.append("Water will boil");
            result.append("\n");
        }

        return result.toString();
    }
}

主:

import java.util.Scanner;

public class FreezingBoilingTester
{
  public static void main(String[] args)
  {

    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter a temperature: ");
    int temperature = scan.nextInt();

    FreezingBoilingPoints temp1 = new FreezingBoilingPoints(temperature );
    System.out.println(temp1.showTempinfo());
  }
}

<强>更新: 你可以使用字符串连接:

String result = "";

if ( condition ) {
  result += "new result";
  result += "\n";
}

但是在性能方面不建议这样做,因为每个+ =操作都会在内存中创建另一个String对象来保存新结果。

答案 1 :(得分:0)

问题是您的私有方法正在使用temperature但是,您没有为showTempinfo()方法传入一个。尝试删除输入参数并使用类中的temp集。此外,在致电temp之前,您需要以某种方式设置showTempinfo()

希望这有帮助。

答案 2 :(得分:0)

showTempinfo()中,您尝试isEthylFreezing()

但它无法正常工作...... isEthylFreezing正在等待一个int ......但它什么都没有......

答案 3 :(得分:0)

您没有将用户提供的输入传递给FreezingBoilingPoints类的构造函数。您正在使用0初始化该类,然后询问用户的温度。用户提供的温度与您用于测试的温度之间没有任何关系。

答案 4 :(得分:0)

您需要在main方法中构造FreezingBoilingPoints对象,然后在其上调用showTempinfo()。此外,您的私有calc方法应该使用成员变量;没有必要把它作为参数。

答案 5 :(得分:0)

您需要将用户输入temperature传递到FreezingBoilingPoints构造函数中。此外,方法showTempInfo()是特定于实例的。例如,您需要通过使用构造函数传递用户输入来实例化您的对象temp1,然后调用temp1.showTempInfo()

答案 6 :(得分:0)

我们走了:

1)所有“is ...”方法都期望有一个int参数,但是当你调用它们时,你并没有传递任何东西。从方法实现或方法调用

中删除int参数

2)你错过了方法isWaterBoiling的结束括号;

3)您将方法“showTempinfo”标记为返回String,但您没有为该方法返回任何内容。添加return命令或从方法签名中删除“String”。