繁体   English   中英

为什么需要int? Java 错误:发现双精度,需要整数

[英]Why is an int required? Java Error: Found double, required int

我正在编写一个从文本文件中读取并显示最大数字的代码。 使用 MaxArray[] for 语句会引发错误,因为输入数字是双精度数,并且它需要一个 int。 关于什么可用于查找包含双精度数的数组的最大值的任何提示?

  import java.io.*;

public class Read {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Rayman7337\\IdeaProjects\\Exam2\\src\\Data.txt"));

            String Num_1 = br.readLine();
            String Num_2 = br.readLine();
            String Num_3 = br.readLine();
            String Num_4 = br.readLine();
            String Num_5 = br.readLine();

            double Convert_1 = Double.parseDouble(Num_1);
            double Convert_2 = Double.parseDouble(Num_2);
            double Convert_3 = Double.parseDouble(Num_3);
            double Convert_4 = Double.parseDouble(Num_4);
            double Convert_5 = Double.parseDouble(Num_5);

            double MaxArray[] = {Convert_1, Convert_2, Convert_3, Convert_4, Convert_5};

            double Max = MaxArray[0];

            for(double i = 0; i<=4; i++){
                if (MaxArray[i] > Max) Max = MaxArray[i];
            }
            System.out.println("The maximum number is: " + Max);

        }catch (Exception ex){
            return;
        }

    }
}

您需要做的就是更换

for(双 i = 0; i<=4; i++){

for(int i = 0; i<=4; i++){

数组中的position只能是 integer 值,这个数组中的position 仍然是您定义的两倍。

双最大数组[]

此外,我会替换 <=4

for(int i = 0; i < MaxArray.length ; i++){

因此,如果向数组添加/删除值,则不必更新限制。

数组索引不应该是双倍的。 请使用以下代码检查差异。

  import java.io.*;

public class Read {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Rayman7337\\IdeaProjects\\Exam2\\src\\Data.txt"));

            String Num_1 = br.readLine();
            String Num_2 = br.readLine();
            String Num_3 = br.readLine();
            String Num_4 = br.readLine();
            String Num_5 = br.readLine();

            double Convert_1 = Double.parseDouble(Num_1);
            double Convert_2 = Double.parseDouble(Num_2);
            double Convert_3 = Double.parseDouble(Num_3);
            double Convert_4 = Double.parseDouble(Num_4);
            double Convert_5 = Double.parseDouble(Num_5);

            double MaxArray[] = {Convert_1, Convert_2, Convert_3, Convert_4, Convert_5};

            double Max = MaxArray[0];

            for(int i = 0; i<=MaxArray.length; i++){
                if (MaxArray[i] > Max) Max = MaxArray[i];
            }
            System.out.println("The maximum number is: " + Max);

        }catch (Exception ex){
            return;
        }

    }
}

数组索引是整数,因此任何用作数组索引的类型都必须安全地转换为 int。 要解决您当前的问题,请相应地更改 for 循环索引的类型。

此外,您可以在数组的第二个元素上开始迭代,因为您将max初始化为maxArray[0]的值。 此模式中 for 循环条件的传统形式是使用小于数组长度。 Java 命名约定是变量通常以小写字母开头。 考虑到这一切...

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

一旦你了解了它是如何工作的,你就可以使用 Stream 来更简洁地完成它。

double max = Arrays.stream(maxArray).max().getAsDouble();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM