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中为ArrayLIst使用for循环(蓝色J)?_Java_Arrays_For Loop_Arraylist_Foreach - Fatal编程技术网

在Java中为ArrayLIst使用for循环(蓝色J)?

在Java中为ArrayLIst使用for循环(蓝色J)?,java,arrays,for-loop,arraylist,foreach,Java,Arrays,For Loop,Arraylist,Foreach,基本上,我一直很难使用for循环来查找存储在类天文台arraylist中的最大地震震级。我得到一个错误,告诉我我的for循环中的变量“I”无法找到,因为该方法无法找到天文台记录的最大震级 class Observatory { private String name; private String country; private int yearStarted; private int area; private int runningTotal; private ArrayList<E

基本上,我一直很难使用for循环来查找存储在类天文台arraylist中的最大地震震级。我得到一个错误,告诉我我的for循环中的变量“I”无法找到,因为该方法无法找到天文台记录的最大震级

class Observatory
{
private String name;
private String country;
private int yearStarted;
private int area;
private int runningTotal;
private ArrayList<Earthquake> earthquakes;
private ArrayList<String> observatories;
Scanner userInput = newScanner(System.in);

private double largestMag(ArrayList<Earthquake> earthquake, double magnitude)
{

    if (earthquake == null || earthquake.isEmpty()){
        return 0;
    }
    for (Earthquake quake : earthquake) {
        if (earthquake.get(0) < earthquake.get(i)){
            return earthquake.get(i);
        }
        if (earthquake.get(0) > earthquake.get(i)){
            return earthquake.get(0);
        }
    }      
}
}


在我的方法中,我不知道如何解决从数组列表中提取震级用于计算的问题。谢谢

您正在混合访问
列表中的项目的方法。使用增强的
for循环可以消除手动计数时可能出现的计数器变量。而是使用
quake
变量,该变量按顺序设置为每个值:

Earthquake largest = quakes.get(0); // start with whatever's first
for(Earthquake quake: earthquakes) {
    if(quake.getMagnitude() > largest.getMagnitude()) {
        largest = quake;
    }
}
还有一些其他问题:

  • 对于方法参数,只使用
    List
    而不是
    ArrayList
    。这允许使用您的代码的人发送任何类型的
    列表
  • 不能使用
    比较对象。但是,您可以实现
    Comparable
    接口,并提供
    compareTo()
    方法来告诉您哪个地震震级更大。然后您可以只使用
    Collections.max(地震)
  • 我不知道您试图在循环逻辑中做什么,但您不能只返回您看到的第一件事。如果需要执行顺序搜索,可以使用“迄今为止最大值”或“迄今为止最小值”变量,并查看每个项目,如果发现新的极值,则更新变量

您正在混合访问
列表中项目的方法。使用增强的
for循环可以消除手动计数时可能出现的计数器变量。而是使用
quake
变量,该变量按顺序设置为每个值:

Earthquake largest = quakes.get(0); // start with whatever's first
for(Earthquake quake: earthquakes) {
    if(quake.getMagnitude() > largest.getMagnitude()) {
        largest = quake;
    }
}
还有一些其他问题:

  • 对于方法参数,只使用
    List
    而不是
    ArrayList
    。这允许使用您的代码的人发送任何类型的
    列表
  • 不能使用
    比较对象。但是,您可以实现
    Comparable
    接口,并提供
    compareTo()
    方法来告诉您哪个地震震级更大。然后您可以只使用
    Collections.max(地震)
  • 我不知道您试图在循环逻辑中做什么,但您不能只返回您看到的第一件事。如果需要执行顺序搜索,可以使用“迄今为止最大值”或“迄今为止最小值”变量,并查看每个项目,如果发现新的极值,则更新变量

您在内部使用的for循环使用了一个迭代器,它没有一个计数器变量i。不要使用地震.get(i),而是使用地震

您在内部使用的for循环使用了一个迭代器,它没有一个计数器变量i。不要使用地震。获取(i),使用地震

也许你可以对
震级
使用
浮点
?也许你可以对
震级
使用
浮点
?啊,那就更有意义了。我想做的是得到每一次地震的震级,如果在循环过程中遇到一次大于存储值的地震,它会用新的震级(最大震级)替换该值然后返回所有地震观测后的最大震级at@user3236854您的代码看起来可能与一些递归搜索混淆了,这些搜索可以用于二进制搜索,但对于线性搜索,只需依次遍历这些项。啊,好的,这更有意义。我想做的是得到每一次地震的震级,如果在循环过程中遇到一次大于存储值的地震,它会用新的震级(最大震级)替换该值然后返回所有地震观测后的最大震级at@user3236854您的代码看起来可能与一些递归搜索混淆了,这些搜索可以用于二进制搜索,但对于线性搜索,只需依次遍历这些项即可。