我需要设置温度等级,并需要改变度的空隙的方法。
如何访问一个void方法这些变量,并确保无效方法改变参数,到我需要的变量?
我需要的度转换,我不知道如何不访问高度可变的集合类?
Temperature (double enteredtemp,char scale ){
degrees=Temperature.set();
}
public void set (double enteredtemp, char scale){
if (scale=='r'||scale=='R'){ degrees=(enteredtemp/(9/5));}
else if (scale=='c'|| scale=='C') {degrees=enteredtemp+273.15;}
else if (scale=='F'||scale=='f'){degrees=((enteredtemp+459.67)*9/5);}
好的做法是 - 不使用静态方法或静态变量,除非有必要,或者你确信这是好办法如何做到这一点。
你的情况,你可以做些事情是这样的:
public class Temperature{
private double temperature;
public Temperature(double temperature){
this.temperature = temperature;
}
public void addOneDegree(){
temperature = temperature+1;
}
public double getTemperature(){
return temperature;
}
}
public class MyGreatProgramForTemperature{
public static void main(String [] args){
double testingTemp;
Temperature temperature = new Temperature(50);
testingTemp = temperature.getTemperature();
System.out.println(testingTemp); //it prints 50
temperature.addOneDegree();
testingTemp = temperature.getTemperature();
System.out.println(testingTemp); //it prints 51
}
}
还要注意,你应该在不同文件中的每个类。
我想你张贴的片断是一类,有一个“度”成员内。 在这种情况下,你在正确的轨道上。
例如 :
public class Temperature {
private double degrees;
public Temperature (double enteredtemp,char scale ) {
degrees=Temperature.set(enteredtemp, scale);
}
public void set (double enteredtemp, char scale) {
if (scale=='r'||scale=='R'){ degrees=(enteredtemp/(9/5));}
else if (scale=='c'|| scale=='C') {degrees=enteredtemp+273.15;}
else if (scale=='F'||scale=='f'){degrees=((enteredtemp+459.67)*9/5);
}
public double getDegrees() {
return degrees;
}
}
这是一个正常运作的类,除了为我没有检查的转换和对我们可以讨论有关方法名称的一些编码规范:)
只是,以确保您了解如何使用这个类,例如主要方法中:
Temperature t = new Temperature(25,'c');
System.out.println("Temperature F " + t.getDegrees());
t.set(30,'c');
System.out.println("Temperature F " + t.getDegrees());
在方法,在Java变量是块作用域意味着你要么需要一个对象的引用传递给你的set
方法(和改变你的方法的对象的值),要么需要它返回的东西(这似乎没有什么你想既然你指定你想要它无效)。
请解释一下到底为什么你希望你的set
方法返回void。 看来你在它的一些计算,我认为这将我更适合作为compute
或calculate
自组方法的方法(也称为setter方法 )有在Java中,以及在许多其他编程语言的非常具体的含义(专OOP的)。
难道是这样的:
public double computeDegrees(double enteredtemp, char scale) {
double degrees = 0;
if (scale=='r'||scale=='R'){ degrees=(enteredtemp/(9/5));}
else if (scale=='c'|| scale=='C') {degrees=enteredtemp+273.15;}
else if (scale=='F'||scale=='f'){degrees=((enteredtemp+459.67)*9/5);
return degrees;
}
发现你的代码另一个线程 ,这里是固定的版本。 请试着去了解它,并要求在评论的问题,如果您有任何。 我想你已经犯下的最大错误是试图实例化温度类的构造函数内的温度对象(最终创建一个堆栈溢出^^)。 当你在一个方法中(可以说一个构造是一种方法)中,使用关键字此指调用方法(一个构造内这指的是对象被实例化)的对象。
public class Temperature {
public double degrees;
public static void main(String[] args) {
// This is an example
Temperature myTemperature = new Temperature(28, 'C');
System.out.println("My temperature is " + myTemperature.get());
Temperature myOhterTemperature = new Temperature(25, 'C');
boolean greaterThan = myTemperature.isGreaterThan(myOhterTemperature);
System.out.println(greaterThan); // should be true since 28 > 25
}
Temperature () {
degrees=0;
}
Temperature (double enteredtemp) {
degrees = enteredtemp;
}
Temperature (double enteredtemp,char scale ) {
set(enteredtemp,scale);
}
public void set (double enteredtemp, char scale){
if (scale == 'r'|| scale == 'R'){ degrees = (enteredtemp/(9/5));}
else if (scale == 'c'|| scale == 'C') {degrees = enteredtemp+273.15;}
else if (scale =='F'|| scale == 'f'){degrees = ((enteredtemp+459.67)*9/5);}
}
public double get() {
return degrees;
}
public double get(char scale) {
if (scale == 'c'|| scale == 'C'){degrees = (degrees-273.15);}
else if (scale == 'r'||scale == 'R'){degrees = (degrees*(9/5));}
else if (scale == 'f'|| scale == 'F'){degrees = (degrees*(9/5)-459.67);}
return degrees;
}
public boolean isLessThan(Temperature t) {
if (this.get() < t.get()) {
return true;
} else {
return false;
}
}
public boolean isGreaterThan(Temperature t) {
if (this.get() > t.get()) {
return true;
} else {
return false;
}
}
public boolean isEqual(Temperature t){
if ((Math.abs(this.get() - t.get())) <= 10E-12) {
return true;
} else {
return false;
}
}
public boolean isGreaterThanOrEqual(Temperature t){
if (this.get() >= t.get()){
return true;
} else {
return false;
}
}
public boolean isLessThanorEqual(Temperature t){
if (this.get() <= t.get()) {
return true;
} else {
return false;
}
}
}
编辑:只注意到你的double get(char scale)
方法实际修改温度实例,其调用该方法的度属性。 这真是措辞不错的选择,请重新阅读我上面的线约存取器 (getter和setter)。 吸气应该几乎从不修改任何价值,尤其是不是类调用的getter的任何财产! 如果我是用这样的温度等级,我当然会期望返回值被转换为给定规模我的体温实例是度值保持的副本 。
在也注意到这条评论是你的教授讨厌开关,休息一下,不会让你使用情况 。 如果此相同的教授给你这个代码库,因为它是,请更换学校。
要实现一个二传手,其职责将是改变大学学位的价值。 塞特斯通常有一个void返回值 - 这意味着它们不返回任何东西。
您发布此代码看起来像一个“OK”二传手:
public void set (double enteredtemp, char scale){
if (scale=='r'||scale=='R'){ degrees=(enteredtemp/(9/5));}
else if (scale=='c'|| scale=='C') {degrees=enteredtemp+273.15;}
else if (scale=='F'||scale=='f'){degrees=((enteredtemp+459.67)*9/5);}
但是,你在呼唤它在构造函数的方法是完全错误的。 此行没有任何意义:
degrees=Temperature.set();
记住你的设置功能返回void,因此试图分配一个值,以度是行不通的。 此外,它完全错过呼叫设定器(这是具有所设定的功能分配的值,以度)的点。 另一个问题是,您所呼叫的set(),仿佛是一个静态方法 - 它不是(如果它是,它会再次错过使用二传手点)。
从您的构造函数中调用您的设置功能的正确方法是:
Temperature (double enteredtemp,char scale )
{
set(enteredtemp, scale)
}
另一个例子...
Temperature temp = new Temperature(98.6, 'F'); // normal temp
temp.set(102, 'F'); // now we've got a fever