package com.javarush.task.task04.task0428;
/*
Положительное число
*/
import java.io.*;
import java.util.*;
public class Solution {
public static int count = 0;
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int number1 = Integer.parseInt(reader.readLine());
int number2 = Integer.parseInt(reader.readLine());
int number3 = Integer.parseInt(reader.readLine());
chet(number1);
chet(number2);
chet(number3);
System.out.println(count);
}
public static void chet(int x){
int count = 0;
if (x > 0) {
count++;
}
}
}
Объясните что не так. Не компилируется, правильное решение в голову не приходит.Богдан
7 уровень
Ошибка при компиляции.
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
1 января 2020, 12:34полезный
vhttps://javarush.com/help?taskKey=com.javarush.task.task04.task0428oid ???
Ты пытаешься в методе main использовать переменную count. Но она объявлена в методе chet, а значит является локальной переменной этого метода. За его пределами она недоступна.
Сам метод chet у тебя по идее должен возвращать значение int, но не возвращает ничего.
+1
Богдан
1 января 2020, 12:53
Я поправил ошибки компиляции, но тогда интересует другое.. Сейчас программа попросту не считает.
0
Ksenia Volkova Java Developer в DXC Master
1 января 2020, 13:01
Это плохая идея - создавать статическую переменную просто потому, что ты не знаешь, как заставить свой код работать правильно.
Сейчас твой код будет давать правильный ответ при однократном запуске. Но если запустить метод main несколько раз ( а именно так и происходит тестирование), то результат окажется неверным.
0
Богдан
1 января 2020, 16:57
Как тогда сделать лучше и правильнее? Создание статической переменной было не с целью создания костыля
0
Богдан
1 января 2020, 16:59
Пример решения подобной задачи, прошло тесты успешно
0
Ksenia Volkova Java Developer в DXC Master
1 января 2020, 17:25решение
Правильнее было бы, например, объявить счетчик в методе main, а у метода chet сделать возвращаемый тип boolean.
И в main считать:
if (chet(number1)) counter++;
Статические переменные нужны для того, чтобы хранить какие-то общие для всех экземпляров класса состояния или характеристики. В этом же случае они нужны для работы метода - и больше ни для чего. Такие переменные как правило должны быть локальными.
В учебных задачах такое еще может пройти, но не удивляйся, когда валидатор начнет ругаться на решения с лишними статическими переменными.
Если у тебя есть метод, который выводит на экран число введенных положительных/отрицательных чисел, то было бы логично, чтобы он работал корректно независимо от того, сколько раз ты его вызвал.
Но если, к примеру, ты в свой класс Solution добавишь такой подкласс:
и запустишь его - таким образом вызвав свой метод дважды - то окажется, что значения накапливаются.
В большинстве случаев это не то, что нужно. +2
Богдан
1 января 2020, 18:30
Ты имеешь в виду что-то подобное? Если да, то выходит не совсем логичное создание метода. В нем нет смысла. Итог - нужно было просто пройти if-ами?)
0
Ksenia Volkova Java Developer в DXC Master
1 января 2020, 19:54
Да, конечно, при таком простом условии нет особого смысла выносить проверку в отдельный метод.
0
Богдан
2 января 2020, 16:09
Спасибо за помощь!)
0