解决:找到输入数组的最大值

时间:2019-11-05 16:18:49

标签: java

编辑::我以为会有3个数组。问题不在于此。

我正在尝试从Jutge.org平台编写一个程序,该程序读取整数序列并显示每个序列的最大值。

输入包含序列的输入。每个序列以其元素数n> 0开头,后跟n个整数。 给定数字和序列[]的长度(将在数字序列之前引入),输入/输出样本如下所示:

输入

10 (array length input)  
10 30 40 50 60 30 40 15 10 20

2  (array length input) 
-54 -134

4  (array length input) 
1 1 1 1

输出

60
-54
1

我有确切的输出,但是我认为缺少了一些东西,因为Judge.org编译器不会接受我的代码正确。

import java.util.*;
public class problema7 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

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

        // sequence 1

        int num1 = in.nextInt();
        int[] seq1 = new int [num1];

        for(int x = 0; x<num1; x++) {
            seq1[x] = in.nextInt();
            if (max1 == 0 || seq1[x] > max1) max1 = seq1[x];
        }

        // sequence 2

        int num2 = in.nextInt();
        int[] seq2 = new int [num2];

        for(int x = 0; x < num2; x++) {
            seq2[x] = in.nextInt();
            if (max2 == 0 || seq2[x] > max2) max2 = seq2[x];
        }

        // sequence 3

        int num3 = in.nextInt();
        int[] seq3 = new int [num3];

        for(int x = 0; x<num3; x++) {
            seq3[x] = in.nextInt();
            if (max3 == 0 || seq3[x] > max3) max3 = seq3[x];
        }

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

问题:

https://jutge.org/problems/P71753_en/pdf

2 个答案:

答案 0 :(得分:0)

您似乎假设将要处理3个数组。问题描述中未对此进行说明。

答案 1 :(得分:0)

首先欢迎来到SO。

第二,Scott的观察是正确的,您确定您的输入将始终有3行吗?这似乎有些束缚。 轰鸣声我做了一个简单的课堂来说明如何解决这个问题:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String line;
        System.out.println("Insert line (empty terminates the program):");

        while(!(line = scanner.nextLine()).isBlank()){
            String[] segments = line.split(" ", 2);

            int population = Integer.parseInt(segments[0]);
            String[] sequence = segments[1].trim().split(" ");
            if(population != sequence.length){
                System.err.println("Population declaration and sequence size do not match\nPopulation: " + population + "\nSequence: "+ segments[1] + ", size: " + sequence[1].length());
                System.exit(0);
            }

            int max = Integer.MIN_VALUE;

            for (String number : sequence) {
                max = Math.max(Integer.parseInt(number), max);
            }

            System.out.println(max);
            System.out.println("Insert line (empty terminates the program):");
        }

        System.out.println("Now exiting");
    }

}

它期望从键盘输入,在一行的第一个空格处分割,检查是否在第一个数字之后插入了正确数目的数字(该数字表示以下序列的填充),然后仅找到最大数目并打印出来。如果您输入空白行,它将退出。

我建议您根据输入内容进行调整。

编辑:while循环的条件使用Java 11的isBlank()方法。因此,您需要Java版本> = 11,或者可以调整条件以使其与所使用的版本兼容。