Написать меню, позволяющее осуществить проверку всех методов
| |
zyxell | Дата: Пятница, 18 Января 2013, 10:23 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Прошу помочь написать меню, позволяющее осуществить проверку всех методов класса. Условие самой задачи:Создать абстрактный базовый класс Container c виртуальными методами sort() и поэлементной обработки контейнер foreach(). Разработать производные класс Bubble (пузарек) и Choice (выбор). В первом классе сортировка реализуется методом пузырька, а поэлементная обработка состоит в извлечении квадратного корня. Во втором классе сортировка реализуется методом выбора, а поэлементная обработка – вычисление логарифма.Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. Реализовать задание разделив каждый класс на интерфейс и реализацию. программа:Код import java.util.*; interface Operation<T> { public T operate(T value); } interface Sortable { public void sort(); } interface Container<T extends Comparable<T>> extends Sortable { public Collection<T> getItems(); public void setItems(Collection<T> items); public void foreach(); } abstract class AbstractContainer<T extends Comparable<T>> implements Container<T>, Iterable<T> { private Collection<T> items; private Operation<T> operation; public AbstractContainer(Collection<T> items, Operation<T> operation) { this.items = items; this.operation = operation; } @Override public void foreach() { if (operation == null) return; Collection<T> result = new ArrayList<T>(items.size()); for (T item : getItems()) { result.add(operation.operate(item)); } setItems(result); } @Override public void setItems(Collection<T> items) { this.items = items; } @Override public Collection<T> getItems() { return items; } @Override public Iterator<T> iterator() { return items.iterator(); } @Override public String toString() { return this.getClass().getCanonicalName() + "{" + "items=" + items + '}'; } } class BubbleSortContainer<T extends Comparable<T>> extends AbstractContainer<T> { public BubbleSortContainer(Collection<T> items, Operation<T> operation) { super(items, operation); } @Override public void sort() { List<T> items = new ArrayList<T>(getItems()); for (int i = 0; i < items.size() - 1; ++i) for (int j = i + 1; j < items.size(); ++j) if (items.get(i).compareTo(items.get(j)) > 0) { T temporaryVariable = items.get(i); items.set(i, items.get(j)); items.set(j, temporaryVariable); } setItems(items); } } class SelectionSortContainer<T extends Comparable<T>> extends AbstractContainer<T> { public SelectionSortContainer(Collection<T> items, Operation<T> operation) { super(items, operation); } @Override public void sort() { List<T> items = new ArrayList<T>(getItems()); for (int i = 0; i < items.size() - 1; ++i) { int min = i; for (int j = i + 1; j < items.size(); ++j) if (items.get(min).compareTo(items.get(j)) > 0) min = j; if (min != i) { T temporaryVariable = items.get(i); items.set(i, items.get(min)); items.set(min, temporaryVariable); } } setItems(items); } } class DefaultSortContainer<T extends Comparable<T>> extends AbstractContainer<T> { public DefaultSortContainer(Collection<T> items, Operation<T> operation) { super(items, operation); } @Override public void sort() { List<T> items = new ArrayList<T>(getItems()); Collections.sort(items); setItems(items); } } class SquareRootOperation implements Operation<Double> { @Override public Double operate(Double value) { return Math.sqrt(value); } } class LogarithmOperation implements Operation<Double> { @Override public Double operate(Double value) { return Math.log(value); } } public class Tutorial0006 { private static Random random = new Random(); private static Collection<Double> getRandomList() { final int numberOfItems = 5 + random.nextInt(4); Collection<Double> items = new ArrayList<Double>(numberOfItems); for (int i = 0; i < numberOfItems; ++i) items.add(random.nextInt(10000) / 100.); return items; } private static <T extends Comparable<T>> Container<T> getRandomContainerImplementation(Collection<T> items, Operation<T> ... operations) { switch (random.nextInt(3)) { case 0: return new BubbleSortContainer<T>(items, operations[0]); case 1: return new SelectionSortContainer<T>(items, operations[1]); } return new DefaultSortContainer<T>(items, null); } public static void main(String[] args) { SquareRootOperation squareRootOperation = new SquareRootOperation(); LogarithmOperation logarithmOperation = new LogarithmOperation(); for (int i = 0; i < 10; ++i) { Container<Double> container = getRandomContainerImplementation(getRandomList(), squareRootOperation, logarithmOperation); System.out.println("Source: " + container); container.sort(); System.out.println("Sorted: " + container); container.foreach(); System.out.println("Foreached: " + container); } } }
|
|
| |
NancyWithoutSid | Дата: Пятница, 18 Января 2013, 12:48 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Оу. 158 строчек ярости Ну правда задание несколько неадекватно. Последнее предложение явно противоречит всем предыдущим. Делается это очень легко и просто Код public abstract class Container{ public void sort(); public void forEach(); } public class BubbleContainer extends Container{ @Override public void sort(){ } @Override public void forEach(){ } } //Аналогично со вставками Вы же там навернули такую жесть, что черт ногу сломит. И самое смешное, что оно неоправдано ВООБЩЕ! А вашему преподователю надо навернуть говна(да именно так,я сегодня злая). И какбы чего вы хотите вообще от меню? чем switch/case не устраивает?
Если вы считаете, что женщина не умеет программировать, то вам стоит попробовать JProfiler или valgrind...
|
|
| |
zyxell | Дата: Пятница, 18 Января 2013, 13:23 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Спасибо, что откликнулись) Честно признаюсь с языком Java только вчера познакомился, поэтому я 0 в этой среде, и поэтому набираюсь наглости попросить вас дописать полностью как это будет выглядеть, а преподавателю я пожалуй передам ваши комментарии)незлитесь пожалуйста Nancy, ну по крайней мере на меня, я от меню, хочу только чтобы оно запускалось и хоть что-нибудь выдавало
|
|
| |
NancyWithoutSid | Дата: Пятница, 18 Января 2013, 14:45 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Код import java.util.List;
public abstract class AbstractContainer<T extends Comparable<T>>{ protected List<T> list;
public abstract void sort(); public abstract void forEach();
public AbstractContainer(List<T> list) { this.list = list; } @Override public String toString(){ return list.toString(); } } Код import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class ChooseSortContainer extends AbstractContainer<Float>{
public ChooseSortContainer(List<Float> list) { super(list); }
@Override public void sort() { // здесь должна быть сортировка выбором Collections.sort(list); }
@Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.log(var)); } list = newList; } } Код import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class BubbleContainer extends AbstractContainer<Float> {
public BubbleContainer(List<Float> list) { super(list); }
@Override public void sort() { //тут должна быть сортировка пузырьком Collections.sort(list); }
@Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.sqrt(var)); } list = newList; }
}
Код import java.util.ArrayList; import java.util.List; import java.util.Scanner;
public class EntryPoint {
/** * @param args */ public static void main(String[] args) { List<Float> testList1 = new ArrayList<Float>(); List<Float> testList2 = new ArrayList<Float>(); for (int i = 0; i < 10; i++) { testList1.add((float) i); testList2.add((float) i); }
ChooseSortContainer ctn1 = new ChooseSortContainer(testList1); BubbleContainer ctn2 = new BubbleContainer(testList2);
Scanner sc = new Scanner(System.in); String cmd; System.out.println("Enter command\n" + "Avail:\n" + "sort ctn1 - sort ChooseSortContainer\n"+ "sort ctn2 - sort BubbleSortContainer\n"+ "each ctn1 - each BubbleSortContainer\n"+ "each ctn2 - each BubbleSortContainer\n");
while (true) { cmd = sc.nextLine(); AbstractContainer last;
if (cmd.equals("sort ctn1")) { ctn1.sort(); last = ctn1; } else if (cmd.equals("sort ctn2")) { ctn2.sort(); last = ctn2; } else if (cmd.equals("each ctn1")) { ctn1.forEach(); last = ctn1; } else if (cmd.equals("each ctn2")) { ctn2.forEach(); last = ctn2; } else if (cmd.equals("exit")) break; else { System.out.println("Unknown command"); continue; }
System.out.println("After perform: " + last.toString());
}
}
} Теперь давайте разберемся со всем этим. Интерфесов тут нет, так как вместо них мы используем абстрактные классы. При чем лишь абстрактный контейнер у нас generic. А Реальные контейнеры уже идут типизированые. Их мы не можем сделать шаблонными, так как математические операции не терпят шаблонов.
Если вы считаете, что женщина не умеет программировать, то вам стоит попробовать JProfiler или valgrind...
Сообщение отредактировал NancyWithoutSid - Пятница, 18 Января 2013, 15:25 |
|
| |
zyxell | Дата: Пятница, 18 Января 2013, 17:40 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Код import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List;
public class ChooseSortContainer extends AbstractContainer<Float>{
public ChooseSortContainer(List<Float> list) { super(list); }
@Override public void sort() { List<Float> items = new ArrayList<Float>(getItems()); for (int i = 0; i < items.size() - 1; ++i) { int min = i; for (int j = i + 1; j < items.size(); ++j) if (items.get(min).compareTo(items.get(j)) > 0) min = j; if (min != i) { Float temporaryVariable = items.get(i); items.set(i, items.get(min)); items.set(min, temporaryVariable); Collections.sort(list); } } } @Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.log(var)); } list = newList; } } Ругается getItems() говорит что "Cannot find symbol"
Добавлено (18.01.2013, 17:40) --------------------------------------------- Вроде получилось избавиться от ошибки у меня получилось вот так Код package entrypoint; import java.util.ArrayList; import java.util.List; import java.util.Scanner;
public class EntryPoint {
/** * @param args */ public static void main(String[] args) { List<Float> testList1 = new ArrayList<Float>(); List<Float> testList2 = new ArrayList<Float>(); for (int i = 0; i < 10; i++) { testList1.add((float) i); testList2.add((float) i); }
ChooseSortContainer ctn1 = new ChooseSortContainer(testList1); BubbleContainer ctn2 = new BubbleContainer(testList2);
Scanner sc = new Scanner(System.in); String cmd; System.out.println("Enter command\n" + "Avail:\n" + "sort ctn1 - sort ChooseSortContainer\n"+ "sort ctn2 - sort BubbleSortContainer\n"+ "each ctn1 - each BubbleSortContainer\n"+ "each ctn2 - each BubbleSortContainer\n");
while (true) { cmd = sc.nextLine(); AbstractContainer last;
if (cmd.equals("sort ctn1")) { ctn1.sort(); last = ctn1; } else if (cmd.equals("sort ctn2")) { ctn2.sort(); last = ctn2; } else if (cmd.equals("each ctn1")) { ctn1.forEach(); last = ctn1; } else if (cmd.equals("each ctn2")) { ctn2.forEach(); last = ctn2; } else if (cmd.equals("exit")) break; else { System.out.println("Unknown command"); continue; }
System.out.println("After perform: " + last.toString());
}
}
} Код package entrypoint; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List;
interface Operation<T> { public T operate(T value); } interface Sortable { public void sort(); } interface Container<T extends Comparable<T>> extends Sortable { public Collection<T> getItems(); public void setItems(Collection<T> items); public void foreach(); }
public abstract class AbstractContainer<T extends Comparable<T>> implements Container<T>, Iterable<T>{ protected List<T> list; private Operation<T> operation; private Collection<T> items;
public abstract void sort(); public abstract void forEach();
public AbstractContainer(List<T> list) { this.items = items; this.operation = operation; this.list = list; }
@Override public String toString(){ return list.toString(); } @Override public void foreach() { if (operation == null) return; Collection<T> result = new ArrayList<T>(items.size()); for (T item : getItems()) { result.add(operation.operate(item)); } setItems(result); } @Override public void setItems(Collection<T> items) { this.items = items; } @Override public Collection<T> getItems() { return items; } @Override public Iterator<T> iterator() { return items.iterator(); } } Код package entrypoint; import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class BubbleContainer extends AbstractContainer<Float> {
public BubbleContainer(List<Float> list) { super(list); }
@Override public void sort() { List<Float> items = new ArrayList<Float>(getItems()); for (int i = 0; i < items.size() - 1; ++i) for (int j = i + 1; j < items.size(); ++j) if (items.get(i).compareTo(items.get(j)) > 0) { Float temporaryVariable = items.get(i); items.set(i, items.get(j)); items.set(j, temporaryVariable); Collections.sort(list); } }
@Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.sqrt(var)); } list = newList; }
} Код package entrypoint; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List;
public class ChooseSortContainer extends AbstractContainer<Float>{
public ChooseSortContainer(List<Float> list) { super(list); }
@Override public void sort() { List<Float> items = new ArrayList<Float>(getItems()); for (int i = 0; i < items.size() - 1; ++i) { int min = i; for (int j = i + 1; j < items.size(); ++j) if (items.get(min).compareTo(items.get(j)) > 0) min = j; if (min != i) { Float temporaryVariable = items.get(i); items.set(i, items.get(min)); items.set(min, temporaryVariable); Collections.sort(list); } } } @Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.log(var)); } list = newList; } } только при запуске выводит run: Enter command Avail: sort ctn1 - sort ChooseSortContainer sort ctn2 - sort BubbleSortContainer each ctn1 - each BubbleSortContainer each ctn2 - each BubbleSortContainer а сам процесс запуска run... думает долго, короче ничего и не запускает
Сообщение отредактировал zyxell - Пятница, 18 Января 2013, 17:47 |
|
| |
NancyWithoutSid | Дата: Пятница, 18 Января 2013, 19:18 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| ну так он ждет твой команды Вот это лолушки. Ты же хотел меню. пишешь "sort ctn1" - он тебе отсортирует первый контейнер
Если вы считаете, что женщина не умеет программировать, то вам стоит попробовать JProfiler или valgrind...
|
|
| |
zyxell | Дата: Пятница, 18 Января 2013, 19:22 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Exception in thread "main" java.lang.NullPointerException at java.util.ArrayList.<init>(ArrayList.java:151) at entrypoint.ChooseSortContainer.sort(ChooseSortContainer.java:17) at entrypoint.EntryPoint.main(EntryPoint.java:37) Java Result: 1 эт я так понял ненормально?
|
|
| |
NancyWithoutSid | Дата: Пятница, 18 Января 2013, 19:44 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Нет, это не нормально Мой код был тестирован и работал. После твоего патча поспались NPE. Это нормальная ситуация. Когда ты меняешь код, то его нужно тестировать. Потому что только Линус Торвальдс способен компилять и дебажить в голове
Если вы считаете, что женщина не умеет программировать, то вам стоит попробовать JProfiler или valgrind...
|
|
| |
zyxell | Дата: Суббота, 19 Января 2013, 04:14 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Ок) а если взять твой код, и подставить туда только сортировку пузырьком, сортировку выбором,без моего так сказать патча, как избавиться от ошибки getItems() говорит что "Cannot find symbol", это используется в сортировках
|
|
| |
NancyWithoutSid | Дата: Суббота, 19 Января 2013, 09:12 | Сообщение # 10 |
был не раз
Сейчас нет на сайте
| зачем тебе в сортировках getItems понадобился? Бери алгоритм из вики и перекладывай на Java. В чем проблема то, я не понимаю
Если вы считаете, что женщина не умеет программировать, то вам стоит попробовать JProfiler или valgrind...
|
|
| |
zyxell | Дата: Суббота, 19 Января 2013, 11:59 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| ок) вставил из вики получилосьКод import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class ChooseSortContainer extends AbstractContainer<Float>{
public ChooseSortContainer(List<Float> list) { super(list); }
@Override public void sort(int[] numbers) { int min, temp; for (int index = 0; index < numbers.length; index++){ min = index; for (int scan = index+1; scan < numbers.length-1; scan++) if (numbers[scan] < numbers[min]) min = scan; // Swap the values temp = numbers[min]; numbers[min] = numbers[index]; numbers[index] = temp; Collections.sort(list); } } @Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.log(var)); } list = newList; } } и Код import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class BubbleContainer extends AbstractContainer<Float> {
public BubbleContainer(List<Float> list) { super(list); }
@Override public void sort(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } void bubblesort(int[] arr){ for(int i = arr.length-1 ; i >= 0 ; i--){ for(int j = 0 ; j < i ; j++){ if( arr[j] > arr[j+1] ) sort(arr, j, j+1); } } Collections.sort(list); } @Override public void forEach() { List<Float> newList = new ArrayList<Float>(); for(Float var : list){ newList.add((float) Math.sqrt(var)); } list = newList; } } но теперь ошибку выдает что public class BubbleContainer и public class ChooseSortContainer не абстрактные( я так понял вот сдесь надо что то подправить Код import java.util.List;
public abstract class AbstractContainer<T extends Comparable<T>>{ protected List<T> list; public abstract void sort(); public abstract void forEach();
public AbstractContainer(List<T> list) { this.list = list; }
@Override public String toString(){ return list.toString(); } } только что?
|
|
| |
|