Четверг, 28 Марта 2024, 22:11

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Java » Написать меню, позволяющее осуществить проверку всех методов
Написать меню, позволяющее осуществить проверку всех методов
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 строчек ярости angry
Ну правда задание несколько неадекватно. Последнее предложение явно противоречит всем предыдущим.
Делается это очень легко и просто
Код

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
был не раз
Сейчас нет на сайте
ну так он ждет твой команды biggrin
Вот это лолушки. Ты же хотел меню.
пишешь "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
был не раз
Сейчас нет на сайте
Нет, это не нормально biggrin
Мой код был тестирован и работал. После твоего патча поспались NPE. Это нормальная ситуация. Когда ты меняешь код, то его нужно тестировать. Потому что только Линус Торвальдс способен компилять и дебажить в голове cry


Если вы считаете, что женщина не умеет программировать, то вам стоит попробовать 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();
   }  
}
только что?
Форум игроделов » Программирование » Java » Написать меню, позволяющее осуществить проверку всех методов
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг