imperiumcat
@imperiumcat

Проблемы с IF в Java?

Условия задачи:

1. Введи с клавиатуры 20 чисел и сохрани их в список
2. рассортируй их в три списока
3. число делится на 3
4. число делится на 2
5. все остальные
6. если число делится одновременно на 2 и 3 то оно попадает в оба списка
7. метод printList должен выводить список с новой строки, каждый элемент с новой строки, сначала 3, 2, потом остальные

решение:

import java.util.*;
import java.lang.*;
import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;

public static void main(String[] args) throws IOException {
        ArrayList<Integer> input = new ArrayList<>();
        ArrayList<Integer> odd = new ArrayList<>();
        ArrayList<Integer> even = new ArrayList<>();
        ArrayList<Integer> other = new ArrayList<>();
 
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < 20; i++) {
            String s = reader.readLine();
            if (s.isEmpty()) {
                break;
            }
            input.add(Integer.parseInt(s));
        }
 
        fillArray(input, odd, even, other);
        printList(odd, even, other);
}
 
 
 
private static void fillArray(ArrayList<Integer> in, ArrayList<Integer> odd, ArrayList<Integer> even, ArrayList<Integer> other) {
        for (int x : in) {
            if (x % 2 == 0 & x % 3 == 0) {
                even.add(x);
                odd.add(x);
            } else if (x % 2 == 0) {
                even.add(x);
            } else if (x % 3 == 0) {
                odd.add(x);
            } else {
                other.add(x);
            }
        }
    }
 
    public static void printList(ArrayList<Integer> odd, ArrayList<Integer> even, ArrayList<Integer> other) {
        System.out.println("odd:");
        for (int j : odd) {
            System.out.println(j);
        }
        System.out.println("even:");
        for (int j : even) {
            System.out.println(j);
        }
        System.out.println("other:");
        for (int j : other) {
            System.out.println(j);
        }
    }
 


работает, код пифксил
  • Вопрос задан
  • 718 просмотров
Решения вопроса 2
@zelan
Кратко обо мне не получится.
В каком редакторе пишешь?

else if (x % 2 == 0)
 {
even.add(x);}   //<------- лишняя скобка
 }


продолжение:

//Эти объекты объявлены в методе main(), и их видно только в нем.
ArrayList<Integer> even = new ArrayList<Integer>();  
ArrayList<Integer> odd = new ArrayList<Integer>();  
ArrayList<Integer> other = new ArrayList<Integer>();


//этот метод не может найти переменные even, odd, other. статический метод может видеть только другие статические методы/переменные/др и то, что передаешь в сигнатуре(в скобочках)
public static void printList(){

}


Выходов много, вот 2 из них:
class Ideone{
 //выносишь переменные из метода main и делаешь их static
static ArrayList<Integer> even = new ArrayList<Integer>();  
static ArrayList<Integer> odd = new ArrayList<Integer>();  
static ArrayList<Integer> other = new ArrayList<Integer>();
}


или
//переписываешь метод, и в мейне при его вызове передаешь сви списки
public static void printList(List<Integer> even, List<Integer> odd, List<Integer> other ){

}
Ответ написан
xez
@xez Куратор тега Java
TL Junior Roo
Main.java:15: error: cannot find symbol
for (int i = 0; i < odd.size(); i++)
^
symbol: variable odd
location: class Ideone

Java не видит переменную odd, то же самое с even и other

Они у тебя объявлены в main
а printList туда доступа не имеет.

В качества quikFix-а могу предложить вынести из метода main.

static ArrayList<Integer> even = new ArrayList<>();
        static ArrayList<Integer> odd = new ArrayList<>();
        static ArrayList<Integer> other = new ArrayList<>();


Это будет компилироваться, но вообще-то лучше так не делать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы