0

完全困惑如何做到这一点。我想要做的是在输出中放置最小或最大的城市。我的理解是您不能在方法中将字符串与另一种数据类型一起放入。世界上我怎么才能把名字和最低温度相匹配?

假设我想要 3 个城市: 然后
我想制作数组 3:
然后我将添加以下城市,(阿兰塔、纽约、里士满)
城市温度为(42.2、98.8、-12.4)

最小值是 -12.4
最大值是 98.8
我有,如何将存储在数组 [2] 中的里士满字符串链接到存储在数组 [2] 中的温度双精度值?任何帮助深表感谢。

import javax.swing.JOptionPane;
import java.util.Scanner;
import java.lang.Math;

public class Ex9
{
public static void main(String[] args)
{
    String message ="";
    double min = 0, max = 0, avg = 0;
    int counter = 1;

    int numberOfCities = Integer.parseInt(JOptionPane.showInputDialog(null, "How many cities would you like to enter?"));
    String[] nameOfCities = new String[numberOfCities];
    double[] temperatureOfCities = new double[numberOfCities];
    for (int i = 0; i < nameOfCities.length; i++)
    {

        nameOfCities[i] = JOptionPane.showInputDialog(null, "Please enter the name of  city " +counter+" :");
        temperatureOfCities[i] = Double.parseDouble(JOptionPane.showInputDialog(null, "Please enter the current temperature of the city " + counter +" :"));
        message += "City name " + nameOfCities[i] + ".\n"
        + "Temperature of city " + temperatureOfCities[i] + " is degrees\n";
        counter++;


    }//end numberOfCities loop

    if(
    JOptionPane.showMessageDialog(null, message + "\nThe average temperature is " +findAvg(temperatureOfCities)+ "\n[Name of city] has the lowest temperature, which is " + findMin(temperatureOfCities) + "\n[Name of city] has the highest temperature, which is " + findMax(temperatureOfCities));

}//end main

public static double findAvg(double[] temperatureOfCities)
{
    double sum =0;
    for(int i=0;i<temperatureOfCities.length;i++)
    {
        sum += temperatureOfCities[i];
    }
    sum = sum/temperatureOfCities.length;
    return sum;

}//end findAvg

public static double findMin(double[] temperatureOfCities)
{
    double min=0;
    for(int i =0; i <temperatureOfCities.length;i++)
    {
        if (temperatureOfCities[i] <= temperatureOfCities[0])
        {
            min = temperatureOfCities[i];
        }
    }//end for loop
    return min;
}//end findMin

public static double findMax(double[] temperatureOfCities)
{
    double max=0;
    for(int i =0; i <temperatureOfCities.length;i++)
    {
        if (temperatureOfCities[i] >= temperatureOfCities[0])
        {
            max = temperatureOfCities[i];
        }
    }//end for loop
return max;
}//end findMax


}//end program
4

2 回答 2

1

这里有两种主要方法:

1)程序方法 - 只需传递两个数组而不是一个数组。如果它们保持同步就没有问题 - 只需为两者使用相同的索引。

2) 面向对象的方法 - 使用双温度和字符串 cityName 定义类 TemperatureReading。然后就可以做一个TemperatureReading[]数组传过来,数据自然就关联起来了。

于 2013-04-10T03:39:48.640 回答
0

更改您的 findMin、findAvg 和 findMax 方法以返回复合测量对象。

class Measurement {
  final double temperature;
  final String cityName;

  Measurment(String cityName, double temperature)
  {
    this.temperature = temperature;
    this.cityName = cityName;
  }
}

更新后的方法可能如下所示:

public static Measurement findMax(String[] nameOfCities, double[] temperatureOfCities) {
  double maxTemp=0;
  String maxName=null;
  for(int i =0; i <temperatureOfCities.length;i++)
  {
      if (temperatureOfCities[i] >= temperatureOfCities[0])
      {
          maxTemp = temperatureOfCities[i];
          maxName = nameOfCities[i];
      }
  } //end for loop
  return new Measurement(maxTemp, maxName);
}

现在您可以使用如下结果:

Measurement maxMeasurement = findMax(nameOfCities, temperatureOfCities);
System.out.println(maxMeasurement.cityName + "has a temperature of " + maxMeasurement.temperature);

findMin 和 findAvg 也是如此。

于 2013-04-10T03:46:19.403 回答