Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用for循环内部、循环外部的变量_Java_Variables_For Loop - Fatal编程技术网

Java 使用for循环内部、循环外部的变量

Java 使用for循环内部、循环外部的变量,java,variables,for-loop,Java,Variables,For Loop,我是这里的第一次用户,尽管过去我试图找到我的nooby问题的答案有时会让我来到这里 所以基本上,我有一个代码,我用它来计算地球表面的温度,实现了一些我已经得到的forumlas。我需要找到一个值(epCarbonDi),它随大气中的碳含量而变化。我使用了一个“for”循环让java在每次碳含量变化时做这个等式,但是bluej不会编译它,它说变量可能没有初始化。我在“for”循环之前声明了它,但没有给它赋值,因为“for”循环意味着在那里用一个值填充变量,之后我需要在循环外部使用这个值 我在某个地

我是这里的第一次用户,尽管过去我试图找到我的nooby问题的答案有时会让我来到这里

所以基本上,我有一个代码,我用它来计算地球表面的温度,实现了一些我已经得到的forumlas。我需要找到一个值(epCarbonDi),它随大气中的碳含量而变化。我使用了一个“for”循环让java在每次碳含量变化时做这个等式,但是bluej不会编译它,它说变量可能没有初始化。我在“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");
        }
    }
}
导入java.text.DecimalFormat;
导入java.math.RoundingMode;
/**
*地球表面温度计算程序
*基于一系列二氧化碳水平。
* 
*@作者Lyssa------学生-----
*@版本----------
*/
公开课阶段4
{
公共静态void main(字符串[]args)
{
//定义用于计算发射率的常数
最终双EP_水=0.65;//由水引起的发射率分量
最终双A=0.1;//由二氧化碳引起的发射率分量
最终双B=0.06;//二氧化碳引起的发射率分量
最终双工业化前碳di=280;//地球大气中二氧化碳的工业化前水平
//定义表面温度常数
最终双太阳系数=1367;
最终双反照率=0.3;
最终双STEFANB_常数=5.67E-8;
最终双轨_RAD=1.0;//地球的轨道半径。
最终双开尔文和摄氏度之差=273.15;//开尔文和摄氏度之差。
//声明变量以保存答案值
双ε;//行星的发射率
double epCarbonDi=0.0;//由二氧化碳引起的发射率分量
双层膜;
双层表面温度;
//计算二氧化碳发射率值的公式
对于(双倍二氧化碳=280.0;二氧化碳我看到的一些问题

  • 您正在循环内分配给
    epCarbonDi
    ,但编译器无法确定循环始终执行的事实,从第一次迭代开始,条件可能为false,因此
    epCarbonDi
    可以在未初始化的情况下使用
  • 您使用
    carbonDiox=carbonDiox+=5
    作为增量条件,但它相当于
    carbonDiox+=5
  • 在循环中,您没有积累任何值,只是分配给它(
    epCarbonDi=..
    ),因此覆盖了上一次迭代,这是预期的行为还是什么

@honeyb_93如果覆盖
epCarbonDi
不是所需的行为,则应使用存储
epCarbonDi
的所有值的数组

        double epsilon;                         //emissivity of the planet
        double epCarbonDi[] = new double[ /*NO. OF VALUES TO BE STORED*/ ];                //component of emissivity due to carbon dioxide
        double surfaceTemp;
        double surfaceTempCelsius;

        //formula to calcluate value of emissivity due to carbon dioxide
        int i = 0;
        for(double carbonDiox = 280.0; carbonDiox <= 400.0; carbonDiox = carbonDiox += 5)
        {
            epCarbonDi[i] = A + B*Math.log(carbonDiox/PREINDUST_CARBONDI);
            i = i+1;
        }
double epsilon;//行星的发射率
double epCarbonDi[]=新的double[/*要存储的数值数量*/];//由二氧化碳引起的发射率分量
双层膜;
双层表面温度;
//计算二氧化碳发射率值的公式
int i=0;

对于(每次更换epCarbon值时,循环中的双倍碳氧=280.0;碳氧),因此,一旦循环完成,epCarbon中的值将是A+B*Math.log(400/PREINDUST_CARBONDI)的回归;它相当于我上面提到的一条语句,因此for循环没有任何意义。告诉我您到底想要在for-epCarbonDi的循环中做什么?对于每个迭代结果,您希望它添加到前面的结果中,在这种情况下,请将代码更改为

for(double carbonDiox = 280.0; carbonDiox <= 400.0; carbonDiox = carbonDiox += 5)
    {
        epCarbonDi = epCarbonDi+(A + B*Math.log(carbonDiox/PREINDUST_CARBONDI));
    }

用于(double carbonDiox=280.0;carbonDiox您使用的变量是double。每次执行for循环时,它都会为所需变量赋值。但在每次迭代中,该值都会被重新写入。即在循环的第一次运行中。假设该变量被赋值为1。在第二次运行时,您会为该变量重新赋值相同的变量,比如说2,依此类推。因此,该变量将始终具有从for循环的最后一次运行计算出的值


如果要使用for循环中计算的每个值,请将其存储在数组或列表中,然后根据需要使用它们。

TL;DR;假设所有这些文本和代码都属于标题中的问题:使用for循环内部、循环外部的变量,在
for
l外部和之前声明变量oop使用初始值,在
for
循环中使用它/填充它,并在
for
循环完成其工作后使用它。我注意到,您的for循环没有任何用处。您的意思是使用类似
+=
的东西吗
for(double carbonDiox = 280.0; carbonDiox <= 400.0; carbonDiox = carbonDiox += 5)
    {
        epCarbonDi = epCarbonDi+(A + B*Math.log(carbonDiox/PREINDUST_CARBONDI));
    }
//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);       
        System.out.print("For a carbon level of " + carbonDiox + 
                        " the surface temperature is: "
                        + df.format(surfaceTempCelsius) 
                        + " \u00b0" + "C");
        System.out.print("\n");
}