找出连续几天之间的温度差异

时间:2014-01-24 20:33:13

标签: java algorithm logic pseudocode

所以我在课堂上输入了这段代码,这是一种在连续两天之间找到最大温差的方法。有十天。我创建了一个包含十个索引的数组,然后我做了这个:

import java.util.Arrays;
import java.util.Collections;

public class Forecast
{
   int [] temps;
   int WEEK;
   int Under32 = 0;
   int[] blazing;

   public Forecast( int y, int[] x )
   {
      WEEK = y;

      temps = new int[x.length];

      //instantiate array with same length as parameter
      for ( int i = 0; i <= temps.length-1; i++ )
      {
         temps[i] = x[i];
      }
      Arrays.sort(temps);
   }

   public void setWeek( int u )
   {
      WEEK = u;
   }

   public int getWeek()
   {
      return WEEK;
   }

   public void setArray( int[] newTemps )
   {
      temps = newTemps;
   }

   //returns an array of temps
   public int[] getTemps()
   {
      int[] w = new int[temps.length];
      for(int i = 0; i < temps.length; i++)
      {
         temps[i] = w[i];
      }
      return w;
   }

   public int getUnderFreeze()
   {
      int FROZEN = 0;
      for( int i = 0; i < temps.length; i++ )
      {
         if( temps[i] < 32 )
         {  
            FROZEN += 1;

         }
      }
      return FROZEN;
   }

   public int[] above100Degrees()
   {
    int newArrayLength=0;
    for( int i = 0; i < temps.length; i++ )
    {
        if( temps[i] > 100 )
        {
            newArrayLength++;
        }
    }

    int[] blazing = new int[newArrayLength];
    int positionInNewArray = 0;
    for( int i = 0; i < temps.length; i++ )
    {
        if( temps[i] > 100 )
        {
            blazing[positionInNewArray] = temps[i];
            positionInNewArray++;
        }
    }
    return blazing;
  }   

   public int[] Assorted()
   {
      Arrays.sort(temps);
      return temps;
   }

   //return an array in descending order, using set algorithm
    public int[] descendSort()
    {
       int[] tempArray = new int[temps.length];

       for (int i = temps.length-1; i <= 0; --i)  
       {
         for (int j = 0; j < temps.length-1; ++i){
            tempArray[j] = temps[i];
       }
    }
    return tempArray;
    }         

    //method returning the largest change between two consecutive days
    public int NetChange()
    {
      int biggestNet = Math.abs(temps[0] - temps[1]);
      for( int i = 0; i < temps.length - 1; i++ )
      {
         if( Math.abs((temps[i] - temps[i+1])) > biggestNet )
         {
            biggestNet = Math.abs(temps[i] - temps[i+1]);
         }
      }
      return biggestNet;
     } 

    public String toString()
    {
      String returnString = "The temperature forecast of week " + WEEK + " is logged in as: ";
      for( int i = 0; i < temps.length; i++ )
      {
          returnString += "\t" + temps[i] + "\t";
      }
      returnString += "\n" + "The number of temperatures below freezing is " + getUnderFreeze() + "." + "\n" + 
                             "The largest difference this week was a net change of " + NetChange() + "." + "\n" + 
                             "The temperature above 100 degrees is: " ; 

      int[] blazing = above100Degrees();                       
      for( int i = 0; i < blazing.length; i++ )
      {
         returnString += "\t" + blazing[i] ;
      }
      return returnString;
    }

    public boolean equals(Object c)
    {
      if( !(c instanceof Forecast))
         return false;
      else
      {
         Forecast objTemp = (Forecast) c;

         if( temps.length != objTemp.temps.length )
            return false;
      }
      return true;
     }

}

我在客户端类中的对象数组是:

int[] temps1 = new int[]{45, 76, 12, 102, 107, 65, 43, 67, 81, 14};

我的输出是:

The largest difference this week was a net change of -2.

这个输出严重错误,我做错了什么????

2 个答案:

答案 0 :(得分:2)

在做差异时你需要设置一个绝对值。它是使用数学类完成的。 Math.abs(温度[0] -temp [1])] 对其余的减法做同样的事情。 编辑 - 让你的方法将数组作为参数

更有意义

答案 1 :(得分:1)

1)按如下方式更改此部分。

if( Math.abs(temps[i] - temps[i+1]) > BiggestNet )
{
    BiggestNet = Math.abs(temps[i] - temps[i+1]);
}

2)另外,像这样初始化它。

int BiggestNet = Math.abs(temps[0] - temps[1]);

3)另外,改变这一点。

BiggestNet = Math.abs(temps[i] - temps[i+1]);

这是你的固定程序。

public class Test005 {

    private static int[] temps = new int[] { 45, 76, 12, 102, 107, 65, 43, 67, 81, 14 };

    public static int NetChange() {
        int BiggestNet = Math.abs(temps[0] - temps[1]);
        for (int i = 0; i < temps.length - 1; i++) {
            if (Math.abs((temps[i] - temps[i + 1])) > BiggestNet) {
                BiggestNet = Math.abs(temps[i] - temps[i + 1]);
            }
        }
        return BiggestNet;
    }

    public static void main(String[] args) {

        System.out.println(NetChange());

    }
}
相关问题