Содержание
В этом цикле практические задания включают реализацию создания класса, описывающего связный список, создание класса для хранения колоды из 36 карт, реализацию метода рекурсии (метода Фибоначчи) с выводом на экран.
Создание класса, описывающего связный список
Создайте класс описывающий связный список. Класс должен иметь возможность добавления элементов и извлечения элементов. Добавление элементов происходит в конец списка, удаление элементов происходит по порядковому номером. Также создайте методы, позволяющие получить размер списка и элемент по его порядковым номером.
Элементы списка должны быть типа Node .
Особенности использования класса Integer Вы сможете найти по этой ссылке, раздел обертки.
При выполнении задания нужно учесть некоторые особенности проверки задач:
- Декларация package должна оставаться неизменной (как в шаблоне).
- Используются исключительно методы с сигнатурой, описанной в шаблоне.
- Количество и содержание полей и/или методов отличных от приведенных в шаблоне не ограничено.
- В каждом классе должен быть или конструктор по умолчанию или public безаргументный конструктор.
Не рекомендуется делать вывод на экран .
class Node{ private Node next; private Integer data; public Node() { } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Integer getData() { return data; } public void setData(Integer data) { this.data = data; } }
Класс списка должен иметь следующую структуру:
public class LinkedList { /* Конструктор без аргументов */ public LinkedList() {} /* Добавить элемент в конец списка */ public void add(Integer data) {} /* Получить элемент по индексу, возвращает null если такой элемент недоступный */ public Integer get(int index) {} /* Изъятие элемента по индексу, возвращает true у случае успеха или false в другом случае */ public boolean delete(int index) {} /*Возвращает размер списка: если элементов в списке нет то возвращает 0 (ноль)*/ public int size() {} }
Вариант реализации:
package com.tasks3.linkedlist; public class LinkedList { private Node tail; private Node head; private int size = 0; public LinkedList() { } public void add(Integer data) { Node newNode = new Node(); newNode.setData(data); if (size == 0) head = newNode; else tail.setNext(newNode); tail = newNode; size++; } public Integer get(int index) { return findNodeByIndex(index).getData(); } public boolean delete(int index) { if (findNodeByIndex(index) != null ) { if (index != 0) findNodeByIndex(index - 1).setNext(findNodeByIndex(index+1)); else head = head.getNext(); size--; return true; } return false; } public int size() { return size; } private Node findNodeByIndex(int index) { if (index < size && index >= 0) { Node curNode = head; int curIndex = 0; while (curIndex < index){ if (curNode.getNext() != null) { curNode = curNode.getNext(); curIndex++; } } return curNode; } else return null; } public String toString() { StringBuilder resultString = new StringBuilder("["); for (int i = 0; i < size; i++) { resultString.append(get(i)); if (i < size-1) resultString.append(", "); } resultString.append("]"); return resultString.toString(); } }
Классы для хранения колоды из 36 карт
Просим учесть некоторые особенности проверки задач:
- Декларация package должна оставаться неизменной (как в шаблоне).
- Для проверки используются (в счет) исключительно методы с сигнатурой описанной в шаблоне.
- Количество и содержание полей и/или методов отличных от приведенных в шаблоне не ограничено.
- В каждом классе должен быть или конструктор по умолчанию или public безаргументное конструктор.
- Не рекомендуется делать вывод на экран.
Card.java
package com.tasks3.carddeck; public class Card { private Rank rank; private Suit suit; public Card(Rank rank, Suit suit) { this.rank = rank; this.suit = suit; } public Rank getRank() { return rank; } public void setRank(Rank rank) { this.rank = rank; } public Suit getSuit() { return suit; } public void setSuit(Suit suit) { this.suit = suit; } }
Rank.java
package com.tasks3.carddeck; public class Rank { public static final Rank ACE = new Rank("Ace"); public static final Rank KING = new Rank("King"); public static final Rank QUEEN = new Rank("Queen"); public static final Rank JACK = new Rank("Jack"); public static final Rank TEN = new Rank("10"); public static final Rank NINE = new Rank("9"); public static final Rank EIGHT = new Rank("8"); public static final Rank SEVEN = new Rank("7"); public static final Rank SIX = new Rank("6"); public static Rank[] values = { ACE, KING, QUEEN, JACK, TEN, NINE, EIGHT, SEVEN, SIX }; private String name; Rank(String name) { this.name = name; } public String getName() { return name; } }
Suit.java
package com.tasks3.carddeck; public class Suit { public static final Suit HEARTS = new Suit("HEARTS"); public static final Suit DIAMONDS = new Suit("DIAMONDS"); public static final Suit CLUBS = new Suit("CLUBS"); public static final Suit SPADES = new Suit("SPADES"); public static Suit[] values = { HEARTS, DIAMONDS, CLUBS, SPADES}; private String name; Suit(String name) { this.name = name; } public String getName() { return name; } }
Вариант реализации Deck.java:
package com.tasks3.carddeck; public class Deck { private static final int DECKSIZE = 36; private int decksize = 36; com.tasks3.carddeck.Card[] deck = new com.tasks3.carddeck.Card[DECKSIZE]; public Deck(){ for (int i = 0; i < 4; i++){ for (int j = 0; j < 9; j++){ deck[i*9+j] = new com.tasks3.carddeck.Card(com.tasks3.carddeck.Rank.values[j], com.tasks3.carddeck.Suit.values[i]); } } } public void shuffle() { com.tasks3.carddeck.Card temp = new com.tasks3.carddeck.Card(com.tasks3.carddeck.Rank.ACE, com.tasks3.carddeck.Suit.CLUBS); for (int i = 0; i < Math.random()*100; i++){ int randomNumberA = (int) (Math.random() * DECKSIZE); int randomNumberB = (int) (Math.random() * DECKSIZE); temp = deck[randomNumberA]; deck[randomNumberA] = deck[randomNumberB]; deck[randomNumberB] = temp; } } public void order() { for (int i = 0; i < 4; i++){ for (int j = 0; j < 9; j++){ deck[i*9+j] = new com.tasks3.carddeck.Card(com.tasks3.carddeck.Rank.values[j], com.tasks3.carddeck.Suit.values[i]); } } } public boolean hasNext() { if (decksize > -1){ return true; } else return false; } public com.tasks3.carddeck.Card drawOne() { decksize--; if (decksize > -1) { return deck[decksize]; } else return null; } }
Фибоначчи
Используя рекурсию, выведите на экран заданное по порядковому номеру число Фибоначчи. Для решения задачи используйте шаблон:
package com.tasks3.fibonacci; public class Fibonacci { // Возвращает число Фибоначчи по номеру, нумерация начнется с единицы // если число невозможно вычислить верните -1 public long getNumber(int position){ } }
Просим учесть некоторые особенности проверки задач:
- Декларация package должна оставаться неизменной (как в шаблоне).
- Для проверки используются (в счет) исключительно методы с сигнатурой описанной в шаблоне.
- Количество и содержание полей и/или методов отличных от приведенных в шаблоне не ограничено.
- В каждом классе должен быть или конструктор по умолчанию или public безаргументный конструктор.
Вариант реализации:
package com.tasks3.fibonacci; public class Fibonacci { public long getNumber(int position){ //PUT YOUR CODE HERE if (position <= 0) { return -1; } //if (position == 0) return 0; if (position == 1) return 1; if (position == 2) return 1; return getNumber(position - 1) + getNumber(position - 2); //PUT YOUR CODE HERE } }
Читайте больше по теме: