Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
1

Задача "Магазин животных": Посчитать суммарную стоимость всех животных.

06.02.2018, 04:11. Показов 4061. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток
Прошу помощи в решении задачи

Исходный файл:
CAT Mike 3 3700
DOG Tom 2 2900
CAT Tick 4.5 3500
DOG Stock 2.5 2900
MOUSE Garry 5.3 3500
CAT Galik 3 2600

Для работы с файлом использовать класс Scanner:
Scanner scaner = new Scanner(new FileReader(FILE_PATH));
В зависимости от параметра type создать нужный объект.
Т.е. строка «CAT Mike 3 2700» преобразуется в объект класса Cat, строка «DOG Tom 2 2900» преобразуется в объект класса Dog.
Создать класс Factory в котором будет 1 статический метод:
public static AnimalShop getObjectFromFactory(String currentLine) {
//код преобразует строку в объект в зависимости от входных данных и возвращает его.
}
Для создания хранилища объектов использовать коллекцию ArrayList
Посчитать суммарную стоимость всех животных.
Вывести животных со стоимостью > 3700.
Вывести отдельно сначала собак, затем котов, затем мышей. (оператор instanceof в помощь)

AnimalShop
(абстрактный)
(name, weight, cost) abstract method getCostWithDiscount

Cat
(константы CAT_SOUND = ‘’meow’’,
DISCOUNT = 20%),
Method getCostWithDiscount();

Dog
(константы DOG_SOUND = ‘’woof’’,
DISCOUNT = 30%),
Method getCostWithDiscount();

Mouse
(константы MOUSE_SOUND = ‘’squeak’’,
DISCOUNT = 50%),
Method getCostWithDiscount();
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.company;
 
/*
Для работы с файлом использовать класс Scanner:
Scanner scaner = new Scanner(new FileReader(FILE_PATH));
В зависимости от параметра type создать нужный объект.
Т.е. строка «CAT Mike 3 2700» преобразуется в объект класса Cat, строка «DOG Tom 2 2900» преобразуется в объект класса Dog.
Создать класс Factory в котором будет 1 статический метод:
public static AnimalShop getObjectFromFactory(String currentLine) {
//код преобразует строку в объект в зависимости от входных данных и возвращает его.
}
Для создания хранилища объектов использовать коллекцию ArrayList.
List<Client> clientsList = new ArrayList<Client>(); //Создание коллекции типа Client
clientsList.add(currentClient); // добавление объекта currentClient типа Client в коллекцию
Посчитать суммарную стоимость всех животных.
Вывести животных со стоимостью > 3700.
Вывести отдельно сначала собак, затем котов, затем мышей. (оператор instanceof в помощь)
 */
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
 
        StringBuffer data = null;
 
        try {
            Scanner in = new Scanner(new FileReader("C:\\Users\\AL\\Desktop\\4 - Магазин животных\\out.txt"));
            data = new StringBuffer();
            while (in.hasNext())
                data.append(in.nextLine()).append("\n");
 
            System.out.println(data.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
 
     
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.company;
 
public abstract class AnimalShop {
    private String name;
    private double weight;
    private int cost;
 
    public AnimalShop(String name, int weight, int cost) {
        this.name = name;
        this.weight = weight;
        this.cost = cost;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public double getWeight() {
        return weight;
    }
 
    public void setWeight(int weight) {
        this.weight = weight;
    }
 
    public int getCost() {
        return cost;
    }
 
    public void setCost(int cost) {
        this.cost = cost;
    }
 
    @Override
    public String toString() {
        return "AnimalShop{" +
                "name='" + name + '\'' +
                ", weight=" + weight +
                ", cost=" + cost +
                '}';
    }
 
    public abstract int getCostWithDiscount() ;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.company;
 
public class Cat extends AnimalShop {
    private final String CAT_SOUND = "meow";
    private final int DISCOUNT = 20;
 
    public Cat(String name, int weight, int cost) {
        super(name, weight, cost);
    }
 
    public String getCAT_SOUND() {
        return CAT_SOUND;
    }
 
    public int getDISCOUNT() {
        return DISCOUNT;
    }
 
    @Override
    public int getCostWithDiscount() {
        return (int)(getCost()-getCost()*getDISCOUNT()/100);
    }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.company;
 
public class Dog extends AnimalShop {
    private final String DOG_SOUND = "woof";
    private final int DISCOUNT = 30;
 
    public Dog(String name, int weight, int cost) {
        super(name, weight, cost);
    }
 
    public String getDOG_SOUND() {
        return DOG_SOUND;
    }
 
    public int getDISCOUNT() {
        return DISCOUNT;
    }
 
    @Override
    public int getCostWithDiscount() {
        return (int)(getCost()-getCost()*getDISCOUNT()/100);
    }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.company;
 
public class Mouse extends AnimalShop{
    private final String MOUSE_SOUND = "squeak";
    private final int DISCOUNT = 50;
 
    public Mouse(String name, int weight, int cost) {
        super(name, weight, cost);
    }
 
    public String getMOUSE_SOUND() {
        return MOUSE_SOUND;
    }
 
    public int getDISCOUNT() {
        return DISCOUNT;
    }
 
    @Override
    public int getCostWithDiscount() {
     return (int)(getCost()-getCost()*getDISCOUNT()/100);
    }
}
Добавлено через 12 минут
Не могу понять как из BufferString получить объекты
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2018, 04:11
Ответы с готовыми решениями:

Зная количество животных каждого вида, посчитайте, сколько всего ног у всех животных на ферме
4. Для решения этой задачи необходимо написать функцию, которая посчитает количество ног у всех...

Напишите программу, которая принимает сначала 3 названий животных, а потом 3 описаний для животных
Напишите программу, которая принимает сначала 3 названий животных, а потом 3 описаний для животных....

Определить результативного охотника — по количеству животных и по весу животных
как определяющий результативного охотника - по количеству животных и по весу животных. #include...

Первые люди одомашнили домашних животных созданием культов и святилищ этих домашних животных
Предполагается, что первые люди на нашей планете Земля одомашнили животных создавая их культы и...

Посчитать животных на ферме
Стоит себе ферма. На ферме сидит фермер и считает, сколько кого есть у него на ферме - a верблюдов,...

19
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
06.02.2018, 07:15 2
Цитата Сообщение от robotcode Посмотреть сообщение
Не могу понять как из BufferString получить объекты
так тебе вроде не объекты нужны, а строки, которые ты фабрике кидаешь, а уже она внутри парсит строку и создает объект.
Разбивай строку по пробелу, получишь массив параметров, где первый это класс животного - его и создавай, отправляя в конструктор остальные параметры.
Цитата Сообщение от robotcode Посмотреть сообщение
Dog extends AnimalShop
по-твоему собака это потомок магазина? может все же подтип животного?
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
06.02.2018, 12:31 3
robotcode, откуда задачки? Подкинь ссылочку пжлст.
0
85 / 67 / 25
Регистрация: 09.10.2017
Сообщений: 208
06.02.2018, 14:12 4
Здравствуйте!

исходный код немного изменён: вместо имени абстрактного класса AnimalShop имя Animal

класс Factory (можно доработать)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mport java.util.ArrayList;
import java.util.List;
 
public class Factory {
    public static Animal getObjectFromFactory(String currentLine) {
//код преобразует строку в объект в зависимости от входных данных и возвращает его.
        Animal animal = null;
        String[] animalsdata = new String[4];
        int idxSpc;
        for(int i=0;i<3;i++){
            idxSpc = currentLine.indexOf(" ");
            animalsdata[i] = currentLine.substring(0,idxSpc);   
            currentLine = currentLine.substring(idxSpc+1);
        }
        animalsdata[3] = currentLine;
 
        switch (animalsdata[0]) {
        case "CAT": 
            animal = new Cat(animalsdata[1], Double.parseDouble(animalsdata[2]), Integer.parseInt(animalsdata[3]));
            break;
        case "DOG": 
            animal = new Dog(animalsdata[1], Double.parseDouble(animalsdata[2]), Integer.parseInt(animalsdata[3]));
            break;
        case "MOUSE": 
            animal = new Mouse(animalsdata[1], Double.parseDouble(animalsdata[2]), Integer.parseInt(animalsdata[3]));
            break;
        }
        return animal;
    }
}
содержание метода main класса Main тоже изменено:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public static void main(String[] args) {
 
        List<Animal> animalsArrayList = new ArrayList<Animal>();
        Animal currentAnimal = null;
        //StringBuffer data = null;
 
        try {
            Scanner in = new Scanner(new FileReader("D:\\semenova\\temp\\Animal\\animaldata.txt"));
            //data = new StringBuffer();
            while (in.hasNext()){
                //data.append(in.nextLine()).append("\n");
                currentAnimal = Factory.getObjectFromFactory(in.nextLine());
                animalsArrayList.add(currentAnimal);
            }
            //System.out.println(data.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
        System.out.println(animalsArrayList);
 
        //суммарная стоимость всех животных
        int sumAnimalsCost = 0;
        for(Animal animal : animalsArrayList){
            sumAnimalsCost += animal.getCost();
        }
        System.out.println("Стоимость всех животных: " + sumAnimalsCost);
    }
Вывод программы:
[
Cat{name='Mike', weight=3.0, cost=3700},
Dog{name='Tom', weight=2.0, cost=2900},
Cat{name='Tick', weight=4.5, cost=3500},
Dog{name='Stock', weight=2.5, cost=2900}, Animal{name='Garry', weight=5.3, cost=3500},
Cat{name='Galik', weight=3.0, cost=2600}]

Стоимость всех животных: 19100

ps метод toString() для классов Cat и Dog переопределён
по строчке "Animal{name='Garry', weight=5.3, cost=3500}, " можно видеть, как будут выводиться объекты коллекции

по задачам:
- общая стоимость животных подсчитана;
- животных, стоимостью более 3700 нет, что выводить в этом случае? сообщение, что таких животных нет?
- третье задание будет доработано

Добавлено через 26 минут
Здравствуйте!

статический метод в классе Main

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        public static void printAnimals(List<Animal> animalsList){
 
            for(Animal animal : animalsList){
                if(animal instanceof Dog)System.out.println(animal);
            }
 
            for(Animal animal : animalsList){
                if(animal instanceof Cat)System.out.println(animal);
            }            
            
            for(Animal animal : animalsList){
                if(animal instanceof Mouse)System.out.println(animal);
            }
            
        }
вызов этого метода в методе main:

Java
1
2
3
        //dogs, cats and mice
        System.out.println("dogs, cats and mice");
        printAnimals(animalsArrayList);
результат работы этого метода:

dogs, cats and mice

Dog{name='Tom', weight=2.0, cost=2900}

Dog{name='Stock', weight=2.5, cost=2900}

Cat{name='Mike', weight=3.0, cost=3700}

Cat{name='Tick', weight=4.5, cost=3500}

Cat{name='Galik', weight=3.0, cost=2600}
Animal{name='Garry', weight=5.3, cost=3500}

PS если нужен весь код, напишите
0
Fene4ka_
06.02.2018, 15:38
  #5

Не по теме:

а почему собака сама считает свою цену ???

0
386 / 74 / 31
Регистрация: 13.04.2012
Сообщений: 127
06.02.2018, 15:53 6
Цитата Сообщение от robotcode Посмотреть сообщение
Посчитать суммарную стоимость всех животных.
Вывести животных со стоимостью > 3700.
Вывести отдельно сначала собак, затем котов, затем мышей. (оператор instanceof в помощь)
Это, имхо, в общем случае не слишком хороший подход. Как по мне, это идеальный случай, чтобы применить здесь Visitor (), но он, скорее всего, избыточен в вашей задаче и лучше взять код TinSemenova.
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public abstract class Animal {
    private int price;
    
    public Animal(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
    
    public void setPrice(int price) {
        this.price = price;
    }
    
    abstract public void accept(AnimalVisitor visitor);
}
 
class Cat extends Animal {
    private static int id = 0;
    private int currentId;
    
    public Cat(int price) {
        super(price);
        currentId = id++;
    }
    
    @Override
    public void accept(AnimalVisitor visitor) {
        visitor.visit(this);
    }
    
    @Override
    public String toString() {
        return "Cat#" + currentId + " " + getPrice();
    }
}
 
class Dog extends Animal {
    private static int id = 0;
    private int currentId;
    
    public Dog(int price) {
        super(price);
        currentId = id++;
    }
    
    @Override
    public void accept(AnimalVisitor visitor) {
        visitor.visit(this);
    }
    
    @Override
    public String toString() {
        return "Dog#" + currentId + " " + getPrice();
    }
}
 
class Mouse extends Animal {
    private static int id = 0;
    private int currentId;
    
    public Mouse(int price) {
        super(price);
        currentId = id++;
    }
    
    @Override
    public void accept(AnimalVisitor visitor) {
        visitor.visit(this);
    }
    
    @Override
    public String toString() {
        return "Mouse#" + currentId + " " + getPrice();
    }
}
Java
1
2
3
4
5
public interface AnimalVisitor {
    void visit(Dog d);
    void visit(Cat c);
    void visit(Mouse m);
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.ArrayList;
import java.util.Collection;
 
public class AnimalPartitioner implements AnimalVisitor {
    Collection<Cat> cats = new ArrayList<>();
    Collection<Dog> dogs = new ArrayList<>();
    Collection<Mouse> mouses = new ArrayList<>();
    
    @Override
    public void visit(Cat c) {
        cats.add(c);
    }
    
    @Override
    public void visit(Dog d) {
        dogs.add(d);
    }
    
    @Override
    public void visit(Mouse m) {
        mouses.add(m);
    }
    
    public Collection<Cat> getCats() {
        return new ArrayList<>(cats);
    }
    
    public Collection<Dog> getDogs() {
        return new ArrayList<>(dogs);
    }
    
    public Collection<Mouse> getMouses() {
        return new ArrayList<>(mouses);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.ArrayList;
import java.util.Collection;
 
public class AnimalPriceFilter implements AnimalVisitor {
    private int priceThreshold = 3700;
    private Collection<Animal> animals = new ArrayList<>();
    
    public void visit(Animal a) {
        if (a.getPrice() > priceThreshold) {
            animals.add(a);
        }
    }
    
    @Override
    public void visit(Dog d) {
        visit((Animal)d);
    }
    
    @Override
    public void visit(Cat c) {
        visit((Animal)c);
    }
    
    @Override
    public void visit(Mouse m) {
        visit((Animal)m);
    }
        
    public Collection<Animal> getAnimals() {
        return animals;
    }
    
    public void setPriceThreshold(int pt) {
        priceThreshold = pt;
    }
    
    public int getPriceThreshold() {
        return priceThreshold;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class AnimalTotalPriceVisitor implements AnimalVisitor {
    private int totalPrice = 0;
    
    public void visit(Animal f) {
        totalPrice += f.getPrice();
    }
    
    @Override
    public void visit(Dog d) {
        visit((Animal)d);
    }
    
    @Override
    public void visit(Cat c) {
        visit((Animal)c);
    }
    
    @Override
    public void visit(Mouse m) {
        visit((Animal)m);
    }
    
    public int getPrice() {
        return totalPrice;
    }
}
В итоге работать с этим в разы удобнее:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        Animal[] animals = { new Cat(1350), new Dog(3900), new Mouse(2400), new Dog(7800), new Mouse(1300),
                new Cat(15_000) };
        System.out.println("All animals in shop:" + Arrays.toString(animals));
 
        AnimalPartitioner ap = new AnimalPartitioner();
        for (Animal a : animals) {
            a.accept(ap);
        }
        System.out.println("Partition result:");
        System.out.println(ap.getCats());
        System.out.println(ap.getDogs());
        System.out.println(ap.getMouses());
        
        
        AnimalTotalPriceVisitor apv = new AnimalTotalPriceVisitor();
        for (Animal a : animals) {
            a.accept(apv);
        }
        System.out.println("\nTotal price:" + apv.getPrice());
 
        
        AnimalPriceFilter apf = new AnimalPriceFilter();
        for (Animal a : animals) {
            a.accept(apf);
        }
        System.out.println("\nAnimals with price higher than " + apf.getPriceThreshold());
        System.out.println(apf.getAnimals());
    }
}
Кроме того, в случае с instanceof вам каждый раз при добавлении очередного животного нужно будет обновлять все места (а их может быть очень сложно найти в большом проекте), где этот instanceof используется для определения типа животного. Компилятор такие штуки не определяет, а в случае с Visitor'ом старый код просто не будет компилироваться.
Это я в качестве практики по материалам HighPredator.
0
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
07.02.2018, 06:04  [ТС] 7
Цитата Сообщение от Welemir1 Посмотреть сообщение
по-твоему собака это потомок магазина? может все же подтип животного?
такая иерархия в условии задачи
Цитата Сообщение от iSmokeJC Посмотреть сообщение
robotcode, откуда задачки? Подкинь ссылочку пжлст.
на курсах преподаватель дает...не спрашивал откуда он их берет...судя потому, что в сети их нет, возможно сам придумывает
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
а почему собака сама считает свою цену ???
к задаче прилагается иерархия с методами и полями

Добавлено через 3 минуты
Вот мое решение данной задачи (хотя и не совсем правильный подход реализован, преподаватель хотел увидеть паттерн, который еще не объяснял)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.company;
 
/*
Для работы с файлом использовать класс Scanner:
Scanner scaner = new Scanner(new FileReader(FILE_PATH));
В зависимости от параметра type создать нужный объект.
Т.е. строка «CAT Mike 3 2700» преобразуется в объект класса Cat, строка «DOG Tom 2 2900» преобразуется в объект класса Dog.
Создать класс Factory в котором будет 1 статический метод:
public static AnimalShop getObjectFromFactory(String currentLine) {
//код преобразует строку в объект в зависимости от входных данных и возвращает его.
}
Для создания хранилища объектов использовать коллекцию ArrayList.
List<Client> clientsList = new ArrayList<Client>(); //Создание коллекции типа Client
clientsList.add(currentClient); // добавление объекта currentClient типа Client в коллекцию
Посчитать суммарную стоимость всех животных.
Вывести животных со стоимостью > 3700.
Вывести отдельно сначала собак, затем котов, затем мышей. (оператор instanceof в помощь)
 */
 
;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
        Animals animals = new Animals();
 
 
        StringBuffer data = null;
 
        try {
            Scanner in = new Scanner(new FileReader("C:\\Users\\AL\\Desktop\\4 - Магазин животных\\out.txt"));
            data = new StringBuffer();
            while (in.hasNext())
                data.append(in.nextLine()).append("\n");
 
            System.out.println(data.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
 
        String s = data.toString(); //исходная строка
        int start = 0, end;
        ArrayList<String> str = new ArrayList<String>(); //складываем подстроки сюда
        String separator = "\n"; //ваш разделитель - может быть любым
        do {
            end = s.indexOf(separator, start);
            if (end >= 0) {
                str.add(s.substring(start, end));
                start = end + separator.length();
            } else
                str.add(s.substring(start));
        } while (end >= 0);
 
 
        String[] myArray = {}; // конвертируем ArrayList в массив
        myArray = str.toArray(new String[str.size()]);
 
 
        for (int j = 0; j < myArray.length; j++) {
            String[] sub1 = myArray[j].split(" ");
            for (int i = 0; i < sub1.length; i++) {
 
                if (sub1[i].equals("CAT")) {
                    Double i1 = Double.valueOf(sub1[i + 2]);
                    Integer i2 = Integer.valueOf(sub1[i + 3]);
                    animals.addAnimal(new Cat(sub1[i + 1], i1, i2));
                }
 
                if (sub1[i].equals("DOG")) {
                    Double i1 = Double.valueOf(sub1[i + 2]);
                    Integer i2 = Integer.valueOf(sub1[i + 3]);
                    animals.addAnimal(new Dog(sub1[i + 1], i1, i2));
                }
 
                if (sub1[i].equals("MOUSE")) {
                    Double i1 = Double.valueOf(sub1[i + 2]);
                    Integer i2 = Integer.valueOf(sub1[i + 3]);
                    animals.addAnimal(new Mouse(sub1[i + 1], i1, i2));
                }
            }
        }
        System.out.println("Все животные:");
        animals.showAnimal();
        System.out.println();
 
        System.out.println("Суммарная стоимость всех животных с учетом скидок = " + animals.getSum());
        System.out.println();
 
        System.out.println("Животные со стоимостью 3700 и выше:");
        animals.getOver3700();
 
        System.out.println();
        animals.showDogCatMouse();
 
 
    }
 
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.company;
 
import java.util.ArrayList;
import java.util.List;
 
public class Animals {
    List<AnimalShop> animals = new ArrayList<AnimalShop>();
 
    public void addAnimal(AnimalShop animalShop) {
        animals.add(animalShop);
    }
 
    public void showAnimal() {
        for (AnimalShop q : animals) {
            System.out.println(q.toString());
        }
    }
 
    public int getSum() {
        int sum = 0;
        for (AnimalShop q : animals) {
            sum = sum + q.getCostWithDiscount();
        }
        return sum;
    }
 
    public void getOver3700() {
 
        for (AnimalShop q : animals) {
            if (q.getCost() >= 3700) {
                System.out.println(q.toString());
            }
        }
 
    }
 
    public void showDogCatMouse() {
        System.out.println("DOG:");
        for (AnimalShop q : animals) {
            if (q.getType().equals("DOG")) {
                System.out.println(q.toString());
            }
        }
 
        System.out.println("CAT:");
        for (AnimalShop q : animals) {
            if (q.getType().equals("CAT")) {
                System.out.println(q.toString());
            }
        }
 
        System.out.println("MOUSE:");
        for (AnimalShop q : animals) {
            if (q.getType().equals("MOUSE")) {
                System.out.println(q.toString());
            }
        }
    }
 
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.company;
 
public abstract class AnimalShop {
    private String name;
    private double weight;
    private int cost;
    private final String type = "null";
 
    public String getType() {
        return type;
    }
 
    public AnimalShop(String name, double weight, int cost) {
        this.name = name;
        this.weight = weight;
        this.cost = cost;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public double getWeight() {
        return weight;
    }
 
    public void setWeight(int weight) {
        this.weight = weight;
    }
 
    public int getCost() {
        return cost;
    }
 
    public void setCost(int cost) {
        this.cost = cost;
    }
 
    @Override
    public String toString() {
        return "AnimalShop{" +
                "name='" + name + '\'' +
                ", weight=" + weight +
                ", cost=" + cost +
                '}';
    }
 
    public abstract int getCostWithDiscount();
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.company;
 
public class Cat extends AnimalShop {
    private final String CAT_SOUND = "meow";
    private final int DISCOUNT = 20;
    private final String type = "CAT";
 
    @Override
    public String getType() {
        return type;
    }
 
    public Cat(String name, double weight, int cost) {
        super(name, weight, cost);
 
    }
 
    public String getCAT_SOUND() {
        return CAT_SOUND;
    }
 
    public int getDISCOUNT() {
        return DISCOUNT;
    }
 
 
    @Override
    public int getCostWithDiscount() {
        return (int) (getCost() - getCost() * getDISCOUNT() / 100);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.company;
 
public class Dog extends AnimalShop {
    private final String DOG_SOUND = "woof";
    private final int DISCOUNT = 30;
    private final String type = "DOG";
 
    @Override
    public String getType() {
        return type;
    }
 
    public Dog(String name, double weight, int cost) {
        super(name, weight, cost);
    }
 
    public String getDOG_SOUND() {
        return DOG_SOUND;
    }
 
    public int getDISCOUNT() {
        return DISCOUNT;
    }
 
    @Override
    public int getCostWithDiscount() {
        return (int) (getCost() - getCost() * getDISCOUNT() / 100);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.company;
 
public class Mouse extends AnimalShop {
    private final String MOUSE_SOUND = "squeak";
    private final int DISCOUNT = 50;
    private final String type = "MOUSE";
 
    @Override
    public String getType() {
        return type;
    }
 
    public Mouse(String name, double weight, int cost) {
        super(name, weight, cost);
    }
 
    public String getMOUSE_SOUND() {
        return MOUSE_SOUND;
    }
 
    public int getDISCOUNT() {
        return DISCOUNT;
    }
 
    @Override
    public int getCostWithDiscount() {
        return (int) (getCost() - getCost() * getDISCOUNT() / 100);
    }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.02.2018, 09:44 8
Цитата Сообщение от robotcode Посмотреть сообщение
на курсах преподаватель дает
так ты на курсах у преподавателя и спрашивай, как решать. Разговаривать надо с людьми, понимаешь?
1
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
07.02.2018, 14:08 9
а так пойдет))?
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package cyberZooShop;
 
import java.util.ArrayList;
import java.util.Random;
 
public class RoomShop {
    private static Random rndGenerator = new Random();
    private static ArrayList<Priceble> box = new ArrayList<>();
 
    static void printAnimalType(int... wouldTypeAnimal) {
        for (int i = 0; i < wouldTypeAnimal.length; i++) {
            for (Priceble tmpAnim : box) {
                if (tmpAnim.getAnimTypeId() == wouldTypeAnimal[i])
                    System.out.print(tmpAnim);
            }
        }
    }
 
    static void printAnimalPrice(boolean areAll, int... wouldTypeAnimalPrice) {
        double summ = 0.0;
        if (areAll) {
            for (Priceble tmpAnim : box) {
                summ += tmpAnim.getAnimalPrice();
            }
            System.out.printf("%nTotal price = $%.2f", summ);
        } else {
            for (int i = 0; i < wouldTypeAnimalPrice.length; i++) {
                for (Priceble tmpAnim : box) {
                    if (tmpAnim.getAnimTypeId() == wouldTypeAnimalPrice[i])
                        summ += tmpAnim.getAnimalPrice();
                }
                System.out.printf("%nPartial price = $%.2f", summ);
            }
        }
    }
 
    static Priceble getAnimal() {
        int tmp = rndGenerator.nextInt(100);
        if (tmp < 30) {
            return new Dog("Dog " + String.valueOf(tmp), rndGenerator.nextDouble()*1000);
        }
        if (tmp > 30 && tmp < 60) {
            return new Cat("Cat " + String.valueOf(tmp), rndGenerator.nextDouble()*100);
        }
        if (tmp > 60) {
            return new Mouse("Mouse " + String.valueOf(tmp), rndGenerator.nextDouble()*10);
        }
        return new Dog("Dog " + String.valueOf(tmp), rndGenerator.nextDouble()*1000);
    }
 
    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            box.add(getAnimal());
        }
        printAnimalType(200, 300); //печать только кошек и мышей
        printAnimalPrice(true); // печать стоимости всех живтных
        printAnimalPrice(false, 200); // печать стоимости всех кошек
    }
}
//######
package cyberZooShop;
 
class Dog implements Priceble{
    private static final int ANIM_TYPE_ID = 100;
    private String name;
    private double price;
 
    Dog(String name, double price) {
        this.name = name;
        this.price = price;
    }
 
    @Override
    public double getAnimalPrice() {
        return price;
    }
 
    @Override
    public int getAnimTypeId() {
        return ANIM_TYPE_ID;
    }
 
    @Override
    public String toString() {
        return String.format("%n \"%s\" - $%.2f",name, price);
    }
}
//######
package cyberZooShop;
 
class Cat implements Priceble {
    private static final int ANIM_TYPE_ID = 200;
    private String name;
    private double price;
 
    public Cat(String name, double price) {
        this.name = name;
        this.price = price;
    }
 
    @Override
    public double getAnimalPrice() {
        return price;
    }
 
    @Override
    public int getAnimTypeId() {
        return ANIM_TYPE_ID;
    }
 
    @Override
    public String toString() {
        return String.format("%n \"%s\" - $%.2f",name, price);
    }
}
//######
package cyberZooShop;
 
public class Mouse implements Priceble {
    private static final int ANIM_TYPE_ID = 300;
    private String name;
    private double price;
 
    Mouse(String name, double price) {
        this.name = name;
        this.price = price;
    }
 
    @Override
    public int getAnimTypeId() {
        return ANIM_TYPE_ID;
    }
 
    @Override
    public double getAnimalPrice() {
        return price;
    }
 
    @Override
    public String toString() {
        return String.format("%n \"%s\" - $%.2f",name, price);
    }
}
//######
package cyberZooShop;
 
interface Priceble {
    double getAnimalPrice();
    int getAnimTypeId();
}


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"Cat 45" - $11,28
 "Cat 41" - $53,57
 "Cat 47" - $6,66
 "Cat 59" - $7,85
 "Cat 56" - $20,79
 "Cat 47" - $72,53
 "Cat 51" - $57,79
 "Cat 47" - $83,54
 "Mouse 93" - $0,80
 "Mouse 96" - $2,19
 "Mouse 83" - $4,02
 "Mouse 81" - $4,06
 "Mouse 94" - $1,74
 "Mouse 74" - $1,54
 "Mouse 80" - $7,81
 "Mouse 87" - $4,13
 "Mouse 69" - $2,66
Total price = $1825,21
Partial price = $314,01
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
07.02.2018, 17:51 10
robotcode, если "преподаватель" тебе дает, что собака наследуется от магазина (и как верно заметили -сама считает свою стоимость), то беги от такого преподавателя. Я не шучу. Кстати в первом посте не увидел таких требований.
Тешу себя надеждой, что это какие-то очередные курсы, а не высшее учебное заведение...Или что ты неверно понял условия.
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
07.02.2018, 18:03 11
Welemir1, когда я обучался в колледже, в котором было 2 направления: электронщик и программист (я учился на программиста), первый мой курсач - игра "судоку" - был написан с использованием двух глобальных массивов (почти для всего юзались), которые назывались A и B, писал тогда на делфи, так вот, за эту работу я получил высший балл) так что увы, но в колледже\универе (я сейчас в универе, повышаю так сказать квалификацию) преподают так себе, обычно во вред) (на прошлом курсе училе джаве образца 2003 года).

И кстати, что самое забавное, когда я ходил на курсы крупной фирмы, то преподаватель, который обучал джаве - показался мне лучшим, кого я вообще в качестве преподавателя встречал, а курс был более чем полный. Так вот этот же преподаватель обучает и в универе, только, естественно, отношение совсем другое)
1
Welemir1
07.02.2018, 18:23
  #12

Не по теме:

Fene4ka_, эх, молодость, делфи....формочки...

0
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
07.02.2018, 20:15  [ТС] 13
Цитата Сообщение от xoraxax Посмотреть сообщение
так ты на курсах у преподавателя и спрашивай, как решать. Разговаривать надо с людьми, понимаешь?
1. у преподавателя своя манера преподавания, дает только "подсказки" (не всегда понятные), а к решению придти должны сами
2. с группы также никто не решил, иначе сюда бы я не написал
3. здесь никого не принуждаю отвечать
4. вопрос был задан на специализированном форуме, собственно для таких вещей он и был создан: одни вопросы задают - другие по мере своих возможностей отвечают
5. в интернете полно форумов где люди нуждаются в твоих советах, не теряй время зря, понимаешь ?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.02.2018, 20:27 14
1. Прийти самому и сидеть тупить на форуме как бы разные вещи
2. Снова встаёт вопрос о твоей адекватности. Зачем ходить на курсы, где не учат?
3. Ещё бы принуждал.
4. Все не мог понять, для чего же форум создан, оказывается, надо было тебя спросить.
5. С тем, как мне терять свое время, я без тебя как-нибудь разберусь.
0
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
07.02.2018, 21:10  [ТС] 15
xoraxax, В этой теме 2 решения: одно TinSemenova, второе мое. Оба варианта отличаются друг от друга. Тупить и предложить свое решение (рабочее, хоть может и не совсем правильное) не одно и тоже.
Когда чувствую негативную энергетику по отношении к себе, то стараюсь переосмыслить свое поведение - и возможно я где-то был не прав. Но добрые люди уже написали не обращать на тебя внимания, так как ты тут уже многих "надоел". Так что бессмысленно продолжать общение. И поэтому прошу проходить мимо топиков, созданных мной.
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
07.02.2018, 23:09 16
robotcode, ты не поверишь, но xora прав, причем в двух сообщениях) в крупных фирмах в IT нужна социалка как ни крути, очень часто будет встречаться ситуация, когда автором непонятного кода будет твой коллега, и поверь, проще спросить у него, чем сидеть и тупить часами, а если гореть после каждого случая, то долго тебя держать не будут иногда приходится повторять одну и туже фразу человеку раз 10, просто меняя порядок слов в предложении, и поверь, очень трудно это сделать ниразу не повысив голос)
0
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
08.02.2018, 00:16  [ТС] 17
Fene4ka_, не поверишь, но я бы с удовольствием лучше спросил бы у кого-нибудь лично. На прошлом занятии я один кто хоть что-то сделал по этой задаче. А вы мне про коллег рассказываете
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
08.02.2018, 03:04 18
robotcode, вам явно стоит менять курсы
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
08.02.2018, 09:12 19
Лучший ответ Сообщение было отмечено robotcode как решение

Решение

robotcode, вот, держите альтернативный вариант. Поковыряйте.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class Animal {
    private Type type;
 
    private String name;
 
    private double cost;
    private double weight;
 
    public Animal(Type type, String name, double cost, double weight) {
        this.type = type;
        this.name = name;
        this.cost = cost;
        this.weight = weight;
    }
 
    public double getCost() {
        return cost;
    }
 
    public double getWeight() {
        return weight;
    }
 
    public String getSound() {
        return type.getSound();
    }
 
    public double getDiscount() {
        return type.getDiscount();
    }
 
    public double getPrice() {
        return cost - cost * type.getDiscount();
    }
 
    public String getName() {
        return name;
    }
 
    @Override
    public String toString() {
        return "Animal :\n" +
                " class      : " + this.getClass().getSimpleName() + "\n" +
                " type       : " + type + "\n" +
                " name       : " + name + "\n" +
                " cost       : " + cost + " $\n" +
                " discount   : " + (long)(type.getDiscount() * 100) + " %\n" +
                " total cost : " + getPrice() + " $\n" +
                " weight     : " + weight + " kg\n" +
                " sound made : " + type.getSound() + "\n";
 
    }
 
    public enum Type {
        CAT("meow", 0.2),
        DOG("woof", 0.3),
        MOUSE("sqeak", 0.5);
 
        private final String sound;
        private final double discount;
 
        Type(String sound, double discount) {
            this.sound = sound;
            this.discount = discount;
        }
 
        public String getSound() {
            return sound;
        }
 
        public double getDiscount() {
            return discount;
        }
    }
}
Java
1
2
3
4
5
public class Cat extends Animal {
    public Cat(String name, double price, double weight) {
        super(Type.CAT, name, price, weight);
    }
}
Java
1
2
3
4
5
public class Dog extends Animal {
    public Dog(String name, double price, double weight) {
        super(Type.DOG, name, price, weight);
    }
}
Java
1
2
3
4
5
public class Mouse extends Animal {
    public Mouse(String name, double price, double weight) {
        super(Type.MOUSE, name, price, weight);
    }
}
Java
1
2
3
public abstract class AnimalFactory {
    public abstract Animal create(String name, double cost, double weight);
}
Java
1
2
3
4
5
6
public class CatFactory extends AnimalFactory {
    @Override
    public Animal create(String name, double cost, double weight) {
        return new Cat(name, cost, weight);
    }
}
Java
1
2
3
4
5
6
public class DogFactory extends AnimalFactory {
    @Override
    public Animal create(String name, double cost, double weight) {
        return new Dog(name, cost, weight);
    }
}
Java
1
2
3
4
5
6
public class MouseFactory extends AnimalFactory {
    @Override
    public Animal create(String name, double cost, double weight) {
        return new Mouse(name, cost, weight);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Auditor {
    private List<Animal> animals;
 
    public void visit(AnimalShop animalShop) {
        animals = animalShop.getCopyOfAnimalsList();
    }
 
    public double calculateTotalAnimalCost() {
        double totalCost = 0.0;
 
        for (Animal animal : animals) {
            totalCost += animal.getCost();
        }
 
        return totalCost;
    }
 
    public void printAnimalsMoreExpensiveThan(double price) {
        animals.stream()
                .filter(animal -> animal.getPrice() > price)
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }
 
    public void printAnimalsInTypeSequence(Class<? extends Animal>... classes) {
        List<Animal> animals;
 
        for (Class<? extends Animal> clazz : classes) {
            animals = getListOfType(clazz);
            animals.forEach(System.out::println);
        }
    }
 
    private List<Animal> getListOfType(Class<? extends Animal> clazz) {
        return animals.stream()
                .filter(clazz::isInstance)
                .collect(Collectors.toList());
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class AnimalShop {
    private static final EnumMap<Animal.Type, AnimalFactory> FACTORY_MAP = new EnumMap<>(Animal.Type.class);
 
    private ArrayList<Animal> animals;
 
    static {
        FACTORY_MAP.put(Animal.Type.CAT, new CatFactory());
        FACTORY_MAP.put(Animal.Type.DOG, new DogFactory());
        FACTORY_MAP.put(Animal.Type.MOUSE, new MouseFactory());
    }
 
    public AnimalShop() {
        animals = new ArrayList<>();
    }
 
    public List<Animal> getCopyOfAnimalsList() {
        return new ArrayList<>(animals);
    }
 
    public void addAnimal(Animal animal) {
        animals.add(animal);
    }
 
    public void accept(Auditor auditor) {
        auditor.visit(this);
    }
 
    public static Animal createAnimalFromDescription(String description) {
        String items[] = description.split("\\s+");
 
        AnimalFactory factory = FACTORY_MAP.get(Animal.Type.valueOf(items[0]));
 
        return factory.create(items[1], Double.valueOf(items[3]), Double.valueOf(items[2]));
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Main {
    public static void main(String[] args) {
        String descriptions[] = {
                "CAT Mike 3 3700",
                "DOG Tom 2 2900",
                "CAT Tick 4.5 3500",
                "DOG Stock 2.5 2900",
                "MOUSE Garry 5.3 3500",
                "CAT Galik 3 2600"
        };
 
        AnimalShop shop = new AnimalShop();
 
        for (String description : descriptions) {
            shop.addAnimal(AnimalShop.createAnimalFromDescription(description));
        }
 
        Auditor auditor = new Auditor();
 
        shop.accept(auditor);
 
        System.out.println("Total cost: " + auditor.calculateTotalAnimalCost());
 
        System.out.println("Expensive animals: ");
        auditor.printAnimalsMoreExpensiveThan(2500);
 
        System.out.println("-- Sequence --");
        auditor.printAnimalsInTypeSequence(Dog.class, Cat.class, Mouse.class);
    }
}
1
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
08.02.2018, 09:14 20
robotcode, xora не самый добрый писатель, но его подсказки очень глубоки, если отвлечься от их некоторой черствости. Например, что случится если вы последуете совету и будете требовать, от препода, отработки ВАШИХ денег?
0
08.02.2018, 09:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2018, 09:14
Помогаю со студенческими работами здесь

Спасти всех животных
Затопленный дерево имеет х ветвей, на каждой из которых спаслось у1 животных, еще у2 животных сидят...

Задача про животных
Здравствуйте, у меня вот так вот задача. Трое ребят вышли гулять с собакой, кошкой и хомячком....

Задача про веса животных
У кого есть немного свободного времени решите мне пожалуйста задачку в turbo прологе,только начал...

Задача про животных в prolog
Решить задачку на prolog, в Dos приложении. Имеются факты: медведь -большой, слон-большой,...

найти всех животных больших и светлого
Здравствуйте! Помогите мне пожалуйста Имеются животные: известны названия, цвет. вес,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru