Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/main/java/AuthorOfBook.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AuthorOfBook extends ValueGetter<Book, java.lang.String>{
public java.lang.String get(Book book){
return book.getAuthor();
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ваня, у нас в самих классах Book, Car и т.п. есть get и set методы, ты зачем-то создаешь им дублеры
И ладно бы дублёры - на каждое поле отдельный класс. Это антипаттерн, имхо..

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, там есть сеттеры и геттеры, но их не досатать из дженериков

}
}
5 changes: 5 additions & 0 deletions src/main/java/BinarySearch.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
import java.util.Arrays;
import java.lang.reflect.Array;
import java.util.stream.Collectors;
import java.lang.RuntimeException;

class BinarySearch<O, V>{
//Ищет объект совпадающий с предоставленным значением
private ValueGetter<O, V> get;
private CustomComparator<V> comp;
private O[] arr;//should be sorted
Expand Down Expand Up @@ -84,6 +86,9 @@ public BinarySearch<O,V> build(){
if (get==null || comp==null){
//TODO throw
}
if (list.size()<=0){
System.out.println("Искать нечего!");
}

result.get=get;
result.comp=comp;
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/ColourOfRV.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class ColourOfRV extends ValueGetter<RootVegetable, java.lang.String>{
public java.lang.String get(RootVegetable rv){
return rv.getColour();
}
}
3 changes: 2 additions & 1 deletion src/main/java/CowLevel.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
import java.lang.String;

class CowLevel{
/*
static class YearOfCar extends ValueGetter<Car, java.lang.Integer>{
public java.lang.Integer get(Car car){
return car.getYearOfProduction();
}
}
}*/
static class IntComp implements CustomComparator<java.lang.Integer>{
public int compare(java.lang.Integer o1, java.lang.Integer o2){
if (o1<o2) return -1;
Expand Down
65 changes: 62 additions & 3 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import java.util.Arrays;
import java.util.Scanner;
import java.lang.Integer;
import java.lang.String;
import java.util.function.Function;

public class Main {
public static enum datatype{
Expand All @@ -8,22 +11,78 @@ public static enum datatype{
ROOTVEGETABLE
}
public static void main(String[] args) {
//Storage storage = Storage.getInstance();

Menu print_array_menu=new Menu();
print_array_menu.prelude="Выберите тип данных";
print_array_menu.addAction("1", "Автомобиль",new PrintArrayAction<Car>(datatype.CAR));
print_array_menu.addAction("2", "Книга",new PrintArrayAction<Book>(datatype.BOOK));
print_array_menu.addAction("3", "Корнепллод",new PrintArrayAction<RootVegetable>(datatype.ROOTVEGETABLE));
print_array_menu.addAction("0", "Отмена", null);

Menu search_menu=new Menu();

CustomComparator<Integer> IntComp=(Integer a, Integer b)->(b-a);
CustomComparator<String> StrComp=(String a, String b)->(a.compareTo(b));

Function<String,Integer> Str2Int=(String str) ->(Integer.parseInt(str));
Function<String,String> Str2Str=(String str) ->(str);

search_menu.prelude="Выберите тип данных";
search_menu.addAction("1", "Автомобиль",new Menu().
addAction("1", "По году", new SearchAction().
setGetter(new YearOfCar()).
setComp(IntComp).
setParser(Str2Int).setSelector(datatype.CAR)
).
addAction("2", "По мощности", new SearchAction().
setGetter(new PowerOfCar()).
setComp(IntComp).
setParser(Str2Int).setSelector(datatype.CAR)
).addAction("3", "По модели", new SearchAction().
setGetter(new YearOfCar()).
setComp(StrComp).
setParser(Str2Str).setSelector(datatype.CAR)
).addAction("0", "Отмена", null)
);
search_menu.addAction("2", "Книга",new Menu().
addAction("1", "По названию", new SearchAction()
.setGetter(new TitleOfBook())
.setComp(StrComp)
.setParser(Str2Str).setSelector(datatype.BOOK)
).addAction("2", "По автору", new SearchAction()
.setGetter(new AuthorOfBook())
.setComp(StrComp)
.setParser(Str2Str).setSelector(datatype.BOOK)
).addAction("3", "По страницам", new SearchAction().
setGetter(new PagesOfBook()).
setComp(IntComp).
setParser(Str2Int).setSelector(datatype.BOOK)
).addAction("0", "Отмена", null)
);
search_menu.addAction("3", "Корнепллод", new Menu().
addAction("1", "По типу", new SearchAction().
setGetter(new TypeOfRV()).
setComp(StrComp).
setParser(Str2Str).setSelector(datatype.ROOTVEGETABLE)
).addAction("2", "По цвету", new SearchAction().
setGetter(new ColourOfRV()).
setComp(StrComp).
setParser(Str2Str).setSelector(datatype.ROOTVEGETABLE)
).addAction("3", "По весу", new SearchAction().
setGetter(new WeightOfRV()).
setComp(IntComp).
setParser(Str2Int).setSelector(datatype.ROOTVEGETABLE)
).addAction("0", "Отмена", null)
);
search_menu.addAction("0", "Отмена", null);

Menu menu = new Menu();
menu.reopen_after_submenu_closes=true;
menu.addAction("1", "Заполнение массива объектов вручную", new ManuallyFillArrayAction());
menu.addAction("2", "Создание массива объектов с рандомными значениями", new RandomFillArrayAction());
menu.addAction("3", "Вывод массива объектов на экран", print_array_menu);
menu.addAction("4", "Сортировка массива", null);//TODO
menu.addAction("5", "Выход", null);
menu.addAction("5", "Поиск объекта по значению", search_menu);
menu.addAction("0", "Выход", null);

menu.execute();
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ public void clearActions(){
public Menu() {
}

public void addAction(String key, String name, MenuAction action){
public Menu addAction(String key, String name, MenuAction action){
choices.put(key, new Pair<String, MenuAction>(name, action));
return this;
}

/*
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/ModelOfCar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class ModelOfCar extends ValueGetter<Car, java.lang.String>{
public java.lang.String get(Car car){
return car.getModel();
}
}
8 changes: 8 additions & 0 deletions src/main/java/MultiBinarySearch.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class MultiBinarySearch<T>{
/*
private LinkedList<BinarySearch> searches;
private class BinarySearchContainer
public class MultiBinarySearchBuilder(){

}*/
}
5 changes: 5 additions & 0 deletions src/main/java/PagesOfBook.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class PagesOfBook extends ValueGetter<Book, java.lang.Integer>{
public java.lang.Integer get(Book book){
return book.getPages();
}
}
5 changes: 5 additions & 0 deletions src/main/java/PowerOfCar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class PowerOfCar extends ValueGetter<Car, java.lang.Integer>{
public java.lang.Integer get(Car car){
return car.getPower();
}
}
4 changes: 2 additions & 2 deletions src/main/java/RandomFillArrayAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ public class RandomFillArrayAction implements MenuAction {

@Override
public void execute(){
//Storage storage = Storage.getInstance();
//Object[] objects = storage.getObjects();

Scanner scanner = new Scanner(System.in);
boolean step = true;


System.out.print("Введите размер массива: ");
int size = getIntInput(scanner);


while (step){
System.out.println("Выберите тип данных для массива:");
System.out.println("1. Автомобиль");
Expand Down
62 changes: 62 additions & 0 deletions src/main/java/SearchAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import java.util.LinkedList;
import java.util.Scanner;
import java.util.function.Function;
import java.lang.String;
import java.lang.Exception;
import java.util.Optional;

class SearchAction<O,V> implements MenuAction{
//Обрабатывает запрос поиска и выводит результат
private static Scanner scan= new Scanner(System.in);
public Main.datatype class_selector;
public ValueGetter<O,V> getter;
CustomComparator<V> comp;
public Function<String,V> parser;

public SearchAction setGetter(ValueGetter<O,V> getter){
this.getter=getter;
return this;
}

public SearchAction setComp(CustomComparator<V> comp){
this.comp=comp;
return this;
}

public SearchAction setParser(Function<String,V> parser){
this.parser=parser;
return this;
}

public SearchAction setSelector(Main.datatype i){
class_selector=i;
return this;
}

public void execute(){
BinarySearch<O,V> search=new BinarySearch<O,V>();
Optional<O> result;
Storage<O> storage= Storage.<O>getInstance(class_selector);
search=search. new BinarySearchBuilder().
addObjects(storage.getObjects()).
setGetter(getter).
setComparator(comp).build();
while(true){
System.out.print("Запрос:");
String input=scan.nextLine();
V search_value;
try{
search_value=parser.apply(input);
}catch(Exception e){
System.out.println(e.toString());
continue;
}
result = search.findObject(search_value);
if(result.isPresent()){
break;
}
System.out.println("Не найдено");
}
System.out.println(result.get().toString());
}
}
2 changes: 1 addition & 1 deletion src/main/java/Storage.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static <T> Storage<T> getInstance(Main.datatype i){
}

public void expandArray(int addSize) {
Object[] newArray = new Object[objects.length + addSize];///*(T[])*/ Array.newInstance(new Class<T>(),objects.length + addSize);//new T[objects.length + addSize];
Object[] newArray = new Object[objects.length + addSize];
System.arraycopy(objects, 0, newArray, 0, objects.length);
objects = newArray;
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/TitleOfBook.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class TitleOfBook extends ValueGetter<Book, java.lang.String>{
public java.lang.String get(Book book){
return book.getTitle();
}
}
5 changes: 5 additions & 0 deletions src/main/java/TypeOfRV.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class TypeOfRV extends ValueGetter<RootVegetable, java.lang.String>{
public java.lang.String get(RootVegetable rv){
return rv.getType();
}
}
5 changes: 5 additions & 0 deletions src/main/java/WeightOfRV.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class WeightOfRV extends ValueGetter<RootVegetable, java.lang.Integer>{
public java.lang.Integer get(RootVegetable rv){
return rv.getWeight();
}
}
5 changes: 5 additions & 0 deletions src/main/java/YearOfCar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class YearOfCar extends ValueGetter<Car, java.lang.Integer>{
public java.lang.Integer get(Car car){
return car.getYearOfProduction();
}
}