Как написать цикл for для ArrayList, чтобы найти максимальное значение - PullRequest
1 голос
/ 30 октября 2019

Мне нужно создать систему мониторинга землетрясений для моего курса. У меня есть один класс под названием «Землетрясение», где у меня есть код для хранения и получения величины, положения и года события. Мой следующий класс - «Обсерватория», где у меня есть код для получения названия обсерватории, места, года ее начала и района. Этот класс также перечисляет все события землетрясения, которые он записал (импортируя Arraylist 'Earthquake' из предыдущего класса).

Однако я не знаю, как написать метод для возврата землетрясения с наибольшей магнитудой, зарегистрированного обсерваторией, поскольку эта информация хранится в классе Землетрясения, а не в классе Обсерватории. SOS?

Java, закодированный на BlueJ.

КЛАСС ЗЕМЛЕТРЯСЕНИЯ:

public class Earthquake
{
/* instance variables - information about the magnitude, position and year of the event*/
private double magnitude;
private double latitude;
private double longitude;
private int year;

public Earthquake(double magnitude, double latitude, double longitude, int year) // initialise instance variables
{
    this.magnitude = magnitude;
    this.latitude = latitude;
    this.longitude = longitude;
    this.year = year;

}


public double getMagnitude()
//method to get magnitude data
{
    return magnitude;
}

public double getLatitude()
//method to get latitude data
{
    return latitude;
}

public double getLongitude()
//method to get longitude data
{
    return longitude;
}

public int getYear()
//method to get year data
{
    return year;
}

КЛАСС НАБЛЮДАТЕЛЕЙ:

import java.util.ArrayList;
public class Observatory
{
/* instance variables - name of observatory, country it is in, year in which earthquake observations started, area covered by observatory and list of earthquake events*/

private String name;
private String country;
private int yearFirstEarthquakeRecorded;
private double area;
private ArrayList<Earthquake> recordedEarthquakes;

public Observatory(String name, String country, int yearFirstEarthquakeRecorded, double area)
{
    // initialise instance variables
    this.name = name;
    this.country = country;
    this.yearFirstEarthquakeRecorded = yearFirstEarthquakeRecorded;
    this.area = area;
    ArrayList<Earthquake> recordedEarthquakes = new ArrayList<Earthquake>(); /*I assume this imports data from Earthquake class*/

}

public String getName()
{
    return name;
}

public String getCountry()
{
    return country;
}

public int getYearFirstEarthquakeRecorded()
{
    return yearFirstEarthquakeRecorded;
}

public double getArea()
{
    return area;
}

public void addEarthquake(Earthquake E)
{
    recordedEarthquakes.add(E); //allows earthquakes recorded to be added?
}

НО КАК ПОЛУЧИТЬ данные осамое сильное землетрясение?

ИДЕЯ: имеет ли это смысл? это не работает, и говорит, что «.size» не может быть найден ...

public Earthquake getLargestMagnitude(double magnitude)
{
    for (int i = 0; i < Earthquake.size(); i++) {
        if (Earthquake.getMagnitude(i) > magnitude) {
            return Earthquake;
        }
    }
}

public Earthquake getLargestMagnitude(double magnitude)
{
    for (int i = 0; i < Earthquake.size(); i++) {
        if (Earthquake.getMagnitude(i) > magnitude) {
            return Earthquake;
        }
    }
}

для этого я ожидаю, что код вернет весь объект Землетрясения с наибольшей магнитудой. но это не работает.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Проблема кодирования в том, что вы не ссылаетесь на переменную. Также старайтесь не называть методы, не являющиеся получателями, с помощью get.

Параметр вам не нужен, так как вы запрашиваете наибольшее, а не первое, большее, чем параметр. Поэтому я удалил его.

public Earthquake largestMagnitude()
{
    Earthquake largest = null;
    for (int i = 0; i < recordedEarthquakes.size(); i++) {
        if (largest == null || recordedEarthquakes.get(i).getMagnitude() > largest.getMagnitude()) {
            largest = recordedEarthquake.get(i);
        }
    }
    return largest;
}
0 голосов
/ 30 октября 2019

То, как вы инициализировали записанные Землетрясения в конструкторе, также неверно, оно должно быть

`recordedEarthquakes = new ArrayList<>();`

    public Earthquake getLargestMagnitude(double magnitude)
    {
        Earthquake largestMagnitude;
        for (int i = 0; i < recordedEarthquakes.size(); i++) 
        {
            Earthquake earthQuake = recordedEarthquakes.get(i);
            if (earthQuake.getMagnitude() > magnitude) {
                largestMagnitude = earthQuake;
            }
        }
        return largestMagnitude;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...