负输入时获取最大值= 0

我正在尝试做功课,但是我的代码出了点问题。 我有3个数组来获取每个数组的最大值。 我正在使用Scanner来获取每个数组的Int数。 我将代码分为3个序列,在这些序列中,我将找到数组的最大数量。

我输入以下数字: 30 40 50 60 30 40 15 10 20 -54 -134 1 1 1 1

问题出现在序列2中,我得到的最大数字为0。

My output

Expected output

    Scanner in = new Scanner(System.in);

    int[] seq1 = new int [10];
    int[] seq2 = new int [2];
    int[] seq3 = new int [4];

    int i,max1,max2,max3;

    max2=Integer.MIN_VALUE;

    //SEQ1

    max1=seq1[0];
    for(i = 0; i < seq1.length; i++ ) {
        seq1[i] = in.nextInt();
        if (seq1[i] > max1) max1 = seq1[i];
    }

    //SEQ2

    max2=seq2[0];
    for(i = 1; i < seq2.length; i++) {
        seq2[i] = in.nextInt();
        if (seq2[i] > max2) max2 = seq2[i];
    }

    //SEQ3

    max3=seq3[0];
    for(i = 0; i < seq3.length; i++ ) {
        seq3[i] = in.nextInt();
        if (seq3[i] > max3) max3 = seq3[i];
    }


    System.out.println(max1);
    System.out.println(-(max2));
    System.out.println(max3);
sothis2000 回答:负输入时获取最大值= 0

问题是您的第二个输入显示为0,因为您将max2初始化为0,并且如果与负数进行比较(例如-54),则显示0是因为它的值较大。您可以尝试使用Interger.MIN.VALUE。

        int max1=Integer.MIN.VALUE;
        int max2=Integer.MIN.VALUE;
        int max3=Integer.MIN.VALUE;

// Just for having values
        int[] seq1 = {10,20,30,101,40,55,66,77,88,99};
        int[] seq2 = {-56,-232};
        int[] seq3 = {1,1,1};

        for (int counter = 1; counter < seq1.length; counter++)
        {
            if (seq1[counter] > max1)
            {
                max1 = seq1[counter];
            }
        }

        for (int counter = 1; counter < seq1.length; counter++)
        {
            if (seq2[counter] > max2)
            {
                max1 = seq2[counter];
            }
        }

        for (int counter = 1; counter < seq1.length; counter++)
        {
            if (seq3[counter] > max2)
            {
                max3 = seq3[counter];
            }
        }

        System.out.println(max1);
        System.out.println(max2);
        System.out.println(max3);

我希望它能帮上忙。

,

在将任何内容添加到数组之前,请将max变量初始化为每个数组的第一个元素。由于int数组中元素的默认值为0,因此max2初始化为0,根据定义,该值大于任何负数。

另外,第二个循环我从1开始,其他循环从0开始。

,

零的问题是您要使用第一个数组元素(即基元)来初始化max变量。 Java中的原始类型不接受NULL值,因此您要在for循环之前的max2中放入零,并且由于数组包含负值,因此值0始终大于负值,因此max2将始终包含0。 >

以下是您应使用的示例:

    Scanner in = new Scanner(System.in);

    int[] seq1 = new int [10];
    int[] seq2 = new int [2];
    int[] seq3 = new int [4];

    int i;
    Integer max1,max2,max3;

    //SEQ1

    max1=null;
    for(i = 0; i < seq1.length; i++ ) {
        seq1[i] = in.nextInt();
        if (max1 == null || seq1[i] > max1) max1 = seq1[i];
    }

    //SEQ2

    max2=null;
    for(i = 1; i < seq2.length; i++) {
        seq2[i] = in.nextInt();
        if (max2 == null || seq2[i] > max2) max2 = seq2[i];
    }

    //SEQ3

    max3=null;
    for(i = 0; i < seq3.length; i++ ) {
        seq3[i] = in.nextInt();
        if (max3 == null || seq3[i] > max3) max3 = seq3[i];
    }


    System.out.println(max1);
    System.out.println(-(max2));
    System.out.println(max3);
,

您应该将所有最大值初始化为Integer.MIN_VALUE,然后删除第二个初始化(max2 = seq2 [0])。 seq2 [0]默认初始化为零。

另外,您的第二个循环应从0开始,而应从1开始。

这是这段代码的样子:

    int max1 = Integer.MIN_VALUE;
    int max2 = Integer.MIN_VALUE;
    int max3 = Integer.MIN_VALUE;

    //SEQ1

    for(i = 0; i < seq1.length; i++ ) {
        seq1[i] = in.nextInt();
        if (seq1[i] > max1) max1 = seq1[i];
    }

    //SEQ2

    for(i = 0; i < seq2.length; i++) {
        seq2[i] = in.nextInt();
        if (seq2[i] > max2) max2 = seq2[i];
    }

    //SEQ3

    for(i = 0; i < seq3.length; i++ ) {
        seq3[i] = in.nextInt();
        if (seq3[i] > max3) max3 = seq3[i];
    }

您正在使用什么IDE?您确实需要学习使用IDE进行调试,因为如果逐步执行此代码,该错误将立即跳到您的身上。如果您不使用IDE,我强烈建议您学习一个。 Eclipse是免费的,即使对于像这样的简单Java项目来说有些肿。否则,您可以在每次出现max3之后简单地放置System.out.println。

本文链接:https://www.f2er.com/3165812.html

大家都在问