Помогите исправить код на Java
Пользователь вводит целые числа до тех пор, пока не введёт слово "СТОП" (гарантируется, что других слов не будет). Найдите произведение ненулевых чисел. Если же такое произведение найти не удалось, то выведите на экран "Не найдено".
Если ввести цифры 3,0,2,4 то код работает верно. Если же ввести например 0,0,2,0 то ответ не верен,выводится ответ "2" хотя по идее должно быть "Не найдено". Но как сделать чтобы работало при вводе цифр 0,0,2,0 не пойму. Решение хотелось бы делать через цикл for. Заранее спасибо. Есть такой код:
import java.util.Scanner;
class MyProgram {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean is_0 = false;
int sum = 1;
for (String s = sc.nextLine();; s = sc.nextLine()) {
if ((s.equals("СТОП"))) {
break;
}
int n = Integer.parseInt(s);
if (n != 0) {
sum = sum * n;
is_0 = true;
}
}
if(!is_0)
System.out.println("Не найдено");
else System.out.println(sum);
}
}
Ответы (2 шт):
Добавьте счетчик и его проверку, если ошибка из-за того, что один множитель есть, и потому произведение неверно считается. Код ниже, но java я вообще не знаю, синтаксис брал по аналогии с вашим. Спасибо @Андрюха, который указал на ряд ошибок. Но первый код ниже не принимается валидатором, так как там логика, что если одно ненулевое число, то произведение ему равно, принимается второй. Странная логика у разработчика, а у @Владимира Клыкова она лучше, чем у меня:-)
import java.util.Scanner;
class MyProgram {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean is_0 = false;
int prod = 0;
int count = 0;
for (String s = sc.nextLine();; s = sc.nextLine()) {
if ((s.equals("СТОП"))) {
break;
}
int n = Integer.parseInt(s);
if (n != 0) {
if (count == 0){
prod = 1;
} prod = prod * n;
count = count + 1;
}
}
if(prod == 0){
System.out.println("Не найдено");
}else if (count == 1){
System.out.println("Не найдено");
}else System.out.println(prod);
}
}
Вот код, который валидатор принимает:
import java.util.Scanner;
class MyProgram {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean is_0 = false;
int prod = 0;
int count = 0;
int one_digit = 0;
for (String s = sc.nextLine();; s = sc.nextLine()) {
if ((s.equals("СТОП"))) {
break;
}
int n = Integer.parseInt(s);
if (n != 0) {
if (count == 0){
prod = 1;
one_digit = n;
} prod = prod * n;
count = count + 1;
}
}
if(prod == 0){
System.out.println("Не найдено");
}else if (count == 1){
System.out.println(one_digit);
}else System.out.println(prod);
}
}
Всем спасибо, действительно проблема была здесь
if (sum == 0) {
is_0 = true;
}
если изменить цикл for вот так, то валидатор решение принимает
for (String s = sc.nextLine();; s = sc.nextLine()) {
if ((s.equals("СТОП"))) {
break;
}
int n = Integer.parseInt(s);
if (n != 0) {
sum = sum * n;
is_0 = true;
}
}