【问题标题】:finding the index of the largest element in an array查找数组中最大元素的索引
【发布时间】:2015-06-01 05:25:19
【问题描述】:

我想编写一个代码来返回给定数组中最大元素的索引。但是,当我尝试编译时,我收到一条我似乎无法理解的消息。尽管我已经完成了错误消息告诉我的事情,但它一直告诉我要修复它们。请帮助这个新手程序员!


public class largest {
    int[] array = new int[10];
    array[0] = 100;
    array[1] = 200;
    array[2] = 300;
    array[3] = 400;
    array[4] = 500;
    array[5] = 600;
    array[6] = 700;
    array[7] = 800;
    array[8] = 900;
    array[9] = 1000;
    int index;

    public static void main(String args) {

        for (int i=0; i<10; i++) {
            if (array[i] < array[i+1]) {
                index = i + 1;
            } else {
                index = i;
            }
            i++;
        }
        System.out.println(index);
    }
}

下面是编译信息。


largest.java:3: error: ']' expected
    array[0] = 100;
      ^
largest.java:3: error: ';' expected
    array[0] = 100;
       ^
largest.java:3: error: illegal start of type
    array[0] = 100;
         ^
largest.java:3: error: <identifier> expected
    array[0] = 100;
          ^

这对所有索引都继续。

【问题讨论】:

  • 旁注:我衷心推荐你学习一些关于java类结构的基础教程。还有关于java中的“如何命名事物”(你的类名应该总是以大写开头)。

标签: java arrays indexing


【解决方案1】:

这种类型的初始化不能在方法之外完成:

array[0] = 100;
array[1] = 200;
array[2] = 300;
array[3] = 400;
array[4] = 500;
array[5] = 600;
array[6] = 700;
array[7] = 800;
array[8] = 900;
array[9] = 1000;

要么将作业转移到您的主要更改中

int[] array = new int[10];

int[] array = {100,200,300,400,500,600,700,800,900,1000};

顺便说一句,除了这个编译错误之外,你的代码没有做它应该做的事情。它将抛出 ArrayIndexOutOfBoundsException(因为当我达到 9 时,array[i+1] 将超出范围)。为了找到最大元素的索引,您必须维护一个保存当前最大值的变量并将其与数组的所有元素进行比较。

public static void main(String args) {
    int max = array[0];
    index = 0;
    for (int i=1; i<10; i++) {
        if (array[i] > max) {
            index = i;
            max = array[i];
        }
    }
    System.out.println(index);
}

【讨论】:

  • 在初始化数组的时候我们不是用{ }而不是( )吗?让它起作用(我不确定这就是我问的原因)还是一个错字?
【解决方案2】:

有一些更正:

public class largest {
  //move inside main() from here
  int[] array = new int[10];
  array[0] = 100;
  array[1] = 200;
  array[2] = 300;
  array[3] = 400;
  array[4] = 500;
  array[5] = 600;
  array[6] = 700;
  array[7] = 800;
  array[8] = 900;
  array[9] = 1000;
  int index; //required default value
  //move inside main() till here

  public static void main(String args) { //missing [] symbol

    for (int i = 0; i < 10; i++) {
      if (array[i] < array[i + 1]) {
        index = i + 1;
      } else {
        index = i;
      }
      i++;
    }
    System.out.println(index);
  }
}

你可以试试这个例子:

public class largest {
  public static void main(String[] args) {
    int[] array = {
      345, 768, 95, 345, 678
    }; //array with default elements
    int index = -1, high = array[0], i = 0;
    for (int e: array) { //loop in every element
      if (e > high) { //check for highest value
        index = i; //assign index of the highest value till now
        high = e; //assign the highest value till now
      }
      i++; //next index
    }
    System.out.println(index); //-1 if not found
  }
}

【讨论】:

    【解决方案3】:
    public static void main(String[] args) {
        int[] array = {100, 200, 300, 400, 500, 600, 700, 800, 900};
        System.out.println(highestValue(array));
    }
    
    public static int highestValue(int[] arr) {
    
        int index = 0;
        int highestValue = Integer.MIN_VALUE;
    
        for(int i = 0; i < arr.length; i++) {
            int temp = arr[i];
            if(temp > highestValue) {
                highestValue = temp;
                index = i;
            }
        }
        return index;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 2018-10-17
      • 2021-11-07
      • 2021-07-02
      • 2020-09-23
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多