我是第一次在這裏用戶,儘管試圖找到我的nooby問題的答案有時會讓我在這裏過去。所以基本上,我用這個代碼來找到行星地球的表面溫度,實現我已經提供的幾個論壇。我需要找到一個值(epCarbonDi),這個值取決於大氣中的碳含量。我使用了一個「for」循環來讓java在每次碳變化時都做這個方程,但bluej不會編譯它,它表示變量可能沒有被初始化。我已經在「for」循環之前聲明瞭它,但沒有爲它賦值,因爲「for」循環意味着在那裏用變量填充變量,然後我需要在循環之外使用它。在循環外使用for循環中的變量
我在某處讀到,如果你只是用0初始化循環外部的變量,它應該以這種方式工作^^,所以我做到了,編譯並且很棒。我去執行它,我所有的信息都很好,但是你看,所有的答案都是相同的!
所以我認爲「for」循環執行了一次並找到了答案,但之後沒有完成所有其他值,我需要它來做到這一點?
我真的很需要一些建議,如果任何人有任何..我會非常感激。我需要能夠在「for」循環之外使用epCarbonDi變量,以及下一個等式的循環值/ s!如果有人能指出我的方向是正確的,那就太棒了。我很新的Java,我已經重新閱讀我的筆記和我的教科書,我已經谷歌搜索它,我找不到任何使它的工作D:
這是我的整個代碼
import java.text.DecimalFormat;
import java.math.RoundingMode;
/**
* A program to calculate the surface temperature of Earth
* based on a range of carbon dioxide levels.
*
* @author Lyssa ------ - Student #---------
* @version ----------
*/
public class Stage4
{
public static void main(String[] args)
{
//define constants for calculating emissivity
final double EP_WATER = 0.65; //component of emissivity due to water
final double A = 0.1; //component of emissivity due to carbon dioxide
final double B = 0.06; //component of emissivity due to carbon dioxide
final double PREINDUST_CARBONDI = 280; //pre-industrial level of carbon dioxide in Earth's atmosphere
//define surface temperature constants
final double SOLAR_CONSTANT = 1367;
final double ALBEDO = 0.3;
final double STEFANB_CONSTANT = 5.67E-8;
final double ORBIT_RAD = 1.0; //the orbital radius of Earth.
final double KELV_CELS_DIFF = 273.15; //the difference between kelvin and celsius.
//declare variables to hold answer values
double epsilon; //emissivity of the planet
double epCarbonDi = 0.0; //component of emissivity due to carbon dioxide
double surfaceTemp;
double surfaceTempCelsius;
//formula to calcluate value of emissivity due to carbon dioxide
for(double carbonDiox = 280.0; carbonDiox <= 400.0; carbonDiox = carbonDiox += 5)
{
epCarbonDi = A + B*Math.log(carbonDiox/PREINDUST_CARBONDI);
}
//formula to calculate emissivity
epsilon = 1.0 - (EP_WATER + epCarbonDi/2);
//write calculation to find surface temperature
surfaceTemp =
Math.pow((SOLAR_CONSTANT/4)*(1.0 - ALBEDO)
/(STEFANB_CONSTANT*epsilon*ORBIT_RAD*ORBIT_RAD), 0.25);
//convert answer from kelvin to celcius
surfaceTempCelsius = surfaceTemp - KELV_CELS_DIFF;
//enable answer to be truncated to 2 decimal places
DecimalFormat df = new DecimalFormat("####0.00");
df.setRoundingMode(RoundingMode.FLOOR);
for(double carbonDiox = 280.0; carbonDiox <= 400.0; carbonDiox = carbonDiox += 5)
{
System.out.print("For a carbon level of " + carbonDiox +
" the surface temperature is: "
+ df.format(surfaceTempCelsius)
+ " \u00b0" + "C");
System.out.print("\n");
}
}
}
,這是在具有即時通訊的問題:
//declare variables to hold answer values
double epsilon; //emissivity of the planet
double epCarbonDi = 0.0; //component of emissivity due to carbon dioxide
double surfaceTemp;
double surfaceTempCelsius;
//formula to calcluate value of emissivity due to carbon dioxide
for(double carbonDiox = 280.0; carbonDiox <= 400.0; carbonDiox = carbonDiox += 5)
{
epCarbonDi = A + B*Math.log(carbonDiox/PREINDUST_CARBONDI);
}
//formula to calculate emissivity
epsilon = 1.0 - (EP_WATER + epCarbonDi/2);
//write calculation to find surface temperature
surfaceTemp =
Math.pow((SOLAR_CONSTANT/4)*(1.0 - ALBEDO)
/(STEFANB_CONSTANT*epsilon*ORBIT_RAD*ORBIT_RAD), 0.25);
TL; DR;假設文本和代碼的所有內容都屬於標題中的問題:*在循環外使用一個變量,在循環外*,在具有初始值的'for'循環之外和之前聲明變量,使用將它填入'for'循環並在'for'循環完成其工作後使用它。 –
只是我注意到的一件快事,你的for循環沒有做任何有用的事情。你的意思是使用類似'+ =','* ='等的東西嗎? – Breavyn