Java: практические задания третьей недели начальных курсов

5 (100%) 8 vote[s]

В этом цикле практические задания включают реализацию создания класса, описывающего связный список, создание класса для хранения колоды из 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
    }
}

Читайте больше по теме:

Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments
Просмотры: 490

Популярные записи