• ,

level05.lesson12.bonus03 не проходит тест

package com.javarush.test.level05.lesson12.bonus03;

import java.io.*;
import java.util.ArrayList;

/* Задача по алгоритмам
Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Integer> list = new ArrayList<>();
        int maximum =0;
        int count=0;
        int a = Integer.parseInt(reader.readLine());
        if(a>0){
            count=a;
        }

        for (int i = 0; i < count; i++)
        {
        list.add(Integer.parseInt(reader.readLine()));

        }

        for (int i =0;i<list.size();i++){
            if(list.get(i)>maximum){
                maximum=list.get(i);
            }
        }

        System.out.println(maximum);
    }
}


Помогите разобраться. Не принимает тест

13 комментариев

Tekilovich
А если все введенные числа будут меньше нуля?
d0wn
соглашусь, очень похоже, что валидатор хочет от вас проверку на <0
prodigy
а зачем эти телодвижения?

        int count=0;
        int a = Integer.parseInt(reader.readLine());
        if(a>0){
            count=a;
        }


лучше так:

        int count = Integer.parseInt(reader.readLine());
        if(count <= 0){
            return;
        }
aiv
  • aiv
  • +2
Ошибка здесь:
int maximum =0;

По этой задаче уже очень много топиков в поиске поищите.
royce
Спасибо.Сделал вот так

int maximum = Integer.MIN_VALUE;
madry
  • madry
  • 0
  • Комментарий отредактирован 2016-10-26 18:16:27 пользователем madry
Я, возможно, усложняю, но я инициализирую maximum в 0, потом делаю проверку на число вводимых цифр >0, и если это так, то сначала приравниваю maximum к первому введенному числу, чтобы отрицательные числа тоже работали, и только потом рисую цикл, но уже от 1. Ну и дуракоотбойники против введения текста, основанные на сравнеии строки с числами с помощью regexp.
madry
public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int maximum=0;
int i=0;
String s = reader.readLine();

if (s.matches("\\d+")&&Integer.parseInt(s)>0){
i=Integer.parseInt(s);
s = reader.readLine();
if (s.matches("[-]?\\d+")) {maximum=Integer.parseInt(s);}

for (int j = 1; j < i; j++)
{
s=reader.readLine();
if (s.matches("[-]?\\d+")&&Integer.parseInt(s)>maximum) maximum=Integer.parseInt(s);
}

}

System.out.println(maximum);
}
}
Shtramak
  • Shtramak
  • +1
  • Комментарий отредактирован 2016-10-26 19:38:48 пользователем Shtramak
Для удобочитаемости код стоит оформлять тегами «code». Попробуй убрать «защиту от дурака»… Местный валидатор — штука привередливая, еще не раз столкнешься. У тебя прога ест все и вместо NumberFormatException при корявом вводе выдает «0»…
madry
Спасибо за подсказку про код. Выдает 0 — да, знаю. Минимальную константу тоже использовать не хотелось. Лучше уж значение по умолчанию. До эксепшнов пока не добрался ;) но собираюсь пройти курс до конца.
Shtramak
  • Shtramak
  • 0
  • Комментарий отредактирован 2016-10-27 00:01:41 пользователем Shtramak
… да я не к тому вел. Если строка будет не числом, то Integer.parseInt(s) выкинет NumberFormatException, чего возможно и ожидает валидатор, а ты в коде через регулярку просто игноришь подобный ввод и выдаешь «0». Ну, это единственное, что пришло на ум, т.к. при корректном вводе код отрабатывает как надо.
Хотя, мож, реально достаточно будет сделать maximum=Integer.MIN_VALUE )))
Yuri_0504
А если я захочу +10 ввести — это уже будет не число? :)
Shtramak
  • Shtramak
  • 0
  • Комментарий отредактирован 2016-10-27 01:07:17 пользователем Shtramak
и то верно…
madry
public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int maximum=0;
        int i=0;
        boolean b=false;
        String s = reader.readLine();

        if (s.matches("[+]?\\d+")&&Integer.parseInt(s)>0){
                i=Integer.parseInt(s);
                s = reader.readLine();
                if (s.matches("[+-]?\\d+")) {maximum=Integer.parseInt(s); b=true;}

                for (int j = 1; j < i ; j++)
                {
                    s=reader.readLine();
                    if (s.matches("[+-]?\\d+")&&Integer.parseInt(s)>maximum) {maximum=Integer.parseInt(s);b=true;}
                }


        }

        if(b)System.out.println(maximum);else System.out.println("Not applicable");
    }
}

Вроде теперь учел.
И я еще раз говорю, я не настоящий сварщик, я только маску нашел. Про обработчика ошибок пока знаю толдько то, что он есть :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.