Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 将数组元素与方法的返回值进行比较_Java_Arrays - Fatal编程技术网

Java 将数组元素与方法的返回值进行比较

Java 将数组元素与方法的返回值进行比较,java,arrays,Java,Arrays,我有一种方法,可以根据用户输入的月数组计算最小和最大降雨量。我的问题是,我的方法返回最小和最大的数量,我需要它返回降雨量最高或最低的月份。我不知道如何将我的min和max方法与months数组进行比较。我想,如果我可以说min是在索引5处找到的,那么我也有办法提取month数组的索引5 我尝试了多种类型的for循环和嵌套for循环,但似乎无法获得正确的月份 public static void main(String[] args) { String[] months = {"Janu

我有一种方法,可以根据用户输入的月数组计算最小和最大降雨量。我的问题是,我的方法返回最小和最大的数量,我需要它返回降雨量最高或最低的月份。我不知道如何将我的min和max方法与months数组进行比较。我想,如果我可以说min是在索引5处找到的,那么我也有办法提取month数组的索引5

我尝试了多种类型的for循环和嵌套for循环,但似乎无法获得正确的月份

public static void main(String[] args) {

    String[] months = {"January", "February", "March","April","May","June","July","August","September","October","November","December"};
    double[] rainfall = new double[months.length];

    Rainfall amazon = new Rainfall();

    //scanner to get user input
    Scanner scanner = new Scanner(System.in);

    //for loop to iterate through the months to get user input of rainfall each month
    for(int i = 0; i<rainfall.length; i++) {
        System.out.println("How much rainfall did you recieve, in inches, for the month of: " + months[i]);
        rainfall[i] = scanner.nextDouble();

        //while statement to reject negative numbers         
        while(rainfall[i] < 0) {
            System.out.println("You can not enter a negative number");
            System.out.println("How much rainfall did you recieve for the month of: " + months[i]);
            rainfall[i] = scanner.nextDouble();  
        }
    }

    System.out.println("total rainfall: " + amazon.getTotalRainfall(rainfall) + 
                       " average Rainfall: " + amazon.getAverageRainfall(rainfall) + 
                       " min: " + amazon.getMinRainfall(rainfall) + 
                       " max: " + amazon.getMaxRainfall(rainfall));

}

public double getMaxRainfall(double[] rainfall) {
    double max = rainfall[0];
    for(int i = 1; i < rainfall.length; i++)
        if(rainfall[i] > max) {
            max = rainfall[i];
        }
    return max;
}      

public double getMinRainfall(double[] rainfall) {
    double min = rainfall[0];
    for(int i = 1; i < rainfall.length; i++)
        if(rainfall[i] < min) {
            min = rainfall[i];
        }
    return min;
}
publicstaticvoidmain(字符串[]args){
字符串[]个月={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
双倍[]降雨量=新的双倍[月长];
降雨量=新降雨量();
//扫描仪获取用户输入
扫描仪=新的扫描仪(System.in);
//for循环遍历各个月,以获得用户每月的降雨量输入
对于(int i=0;i max){
max=降雨量[i];
}
返回最大值;
}      
公共双倍降雨量(双倍[]降雨量){
双分钟=降雨量[0];
对于(int i=1;i

我需要知道降雨量最高和最低的月份。解决这个问题的方法是跟踪最高降雨量的指数,而不是数值。现在的问题是,您有两个不同的数组,其中一个数组的值与另一个数组的值不相关

为此,您可以执行以下操作:

    public int getMaxRainfallIndex(double[] rainfall) {
        int max = 0;
        for (int i = 1; i < rainfall.length; i++)
            if (rainfall[i] > rainfall[max]) {
                max = i;
            }
        return max;
    } 
    public static void main(String[] args) {
        Rainfall[] rainfall = new Rainfall[12];
        //Do everything else
    }

    public class Rainfall {
        private String month;
        private double rainfall;

        //Constructor, Getters + Setters
    }
 public int getMaxRainfallIndex(double[] rainfall)
      {
        int maxIndex = 0;
        double max = rainfall[0];
              for(int i = 1; i < rainfall.length; i++)
                 if(rainfall[i] > max)
                    {
                     max = rainfall[i];
                     maxIndex = i;
                    }
              return maxIndex;
     }   

一个可能的解决方案是返回当月的索引,因此,例如,您的
getMaxRainsion
方法应该如下所示:

    public int getMaxRainfallIndex(double[] rainfall) {
        int max = 0;
        for (int i = 1; i < rainfall.length; i++)
            if (rainfall[i] > rainfall[max]) {
                max = i;
            }
        return max;
    } 
    public static void main(String[] args) {
        Rainfall[] rainfall = new Rainfall[12];
        //Do everything else
    }

    public class Rainfall {
        private String month;
        private double rainfall;

        //Constructor, Getters + Setters
    }
 public int getMaxRainfallIndex(double[] rainfall)
      {
        int maxIndex = 0;
        double max = rainfall[0];
              for(int i = 1; i < rainfall.length; i++)
                 if(rainfall[i] > max)
                    {
                     max = rainfall[i];
                     maxIndex = i;
                    }
              return maxIndex;
     }   

您可以创建一个单独的
类,而不是单独管理两个数组:

public class RainfallByMonth {
    private double rainfall;
    private String month;

    // Getter/Setters here
}
在您的主要方法中:

public static void main(String[] args) {
    RainfallByMonth[] rainfallByMonths = new RainfallByMonth[12];
    String[] months = new DateFormatSymbols().getMonths(); // array of months

    Scanner scanner = new Scanner(System.in);
    for (int i = 0; i < rainfallByMonths.length; i++) {
        System.out.println("How much rainfall did you receive, in inches, for the month of: " + months[i]);
        rainfallByMonths[i].setMonth(months[i]);
        rainfallByMonths[i].setRainfall(scanner.nextDouble());
    }
    RainfallByMonth maxRainfall = getMaxRainfall(rainfallByMonths);
    // Now you can print the results here
}
publicstaticvoidmain(字符串[]args){
RainfallByMonth[]rainfallByMonths=新RainfallByMonth[12];
String[]months=new DateFormatSymbols().getMonths();//月数组
扫描仪=新的扫描仪(System.in);
for(int i=0;i
按月计算最大降雨量:

public static RainfallByMonth getMaxRainfall(RainfallByMonth[] rainfallByMonths) {
    RainfallByMonth maxRainfall = rainfallByMonths[0];
    for(int i = 1; i < rainfallByMonths.length; i++) {
        if(rainfallByMonths[i].getRainfall() > maxRainfall.getRainfall()) {
            maxRainfall = rainfallByMonths[i];
        }
    }
    return maxRainfall;
}
公共静态RainfallByMonth GetMaxRain(RainfallByMonth[]rainfallByMonths){
RainfallByMonth最大降雨量=rainfallByMonths[0];
for(int i=1;iMaxRainfrain.GetRainfrain()){
最大降雨量=每月降雨量[i];
}
}
回归最大降雨量;
}
同样,对于
min
情况,反之亦然(只有条件不同)。这将更容易管理

publicstaticvoidmain(字符串[]args){
public static void main(String[] args) {
      String[] months = {"January", "February", "March","April","May","June","July","August","September","October","November","December"};
      int[] weather = {10, -1, 7,44,33,6,22,54,89,21,8,51};
      int max = 0;
      int index= 0;
      for (int i=0;i<weather.length-1;i++  ){
          if (weather[i] > m){
              max = weather[i];
              index= i;
          } 
      }
      System.out.println(months[index]); 
}
字符串[]个月={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”}; int[]天气={10,-1,7,44,33,6,22,54,89,21,8,51}; int max=0; int指数=0; for(int i=0;i m){ max=天气[i]; 指数=i; } } 系统输出打印项次(月[指数]); }
一个查找最高月份的示例程序。
要在if条件中查找最低月降雨量小于符号

为什么不使用返回最小或最大降雨量月份的
int
索引的方法,而不是实际的最小或最大降雨量值。谢谢。这解决了我的问题。不过我有个问题。我不完全理解该方法是如何工作的。它与我的min和max方法没有太大区别,但以某种方式返回索引。有没有可能详细说明一下雨量[max]如何为我提供最高雨量元素的索引。@Ross基本上,代码所做的是遍历数组的每个索引,并检查该位置的值是否高于当前最高值。如果这是真的,它将保存该值的索引。降雨量[max]用于获取当前实际最高值,因为我们存储的唯一内容是该值的索引。这意味着,如果当前最高索引处的值低于正在检查的值,它将为该索引设置新的最高值,依此类推。@Ross这意味着,当到达数组末尾时,所有值都已比较,并且每次比较都存储两个索引中较高的值。然后在末尾返回,这意味着您将只从数组返回最高的索引值。然后可以使用此返回值从原始2个数组中获取当月的实际值和降雨量值。