Прошу помощи.

 
 
 
Сообщения:1
всем привет,я занимаюсь Java недавно,сейчас у меня стала задача спроектировать блокнот вот суть задачи:

Спроектировать и разработать классы Запись в блокноте и Блокнот (записи блокнота хранятся в массиве). Реализовать методы: Добавить запись, Удалить запись, Редактировать запись, Посмотреть все записи.
У меня проблема с методом deleteNote,т.к записи хранятся в массиве то я бы хотел с помощью этого метода выборочно удалять строки(записи)например у меня массив из 3 элементов,в каждом из них хранится какая-нибудь запись,например я хочу удалить запись номер 1, и приравнять к значению null эту строчку.Я использую if.
вот код:
private static void deleteNote(BufferedReader reader, String[] note) throws IOException{
System.out.println("Please enter number of line what you would like to delete?");
System.out.println("If you want to delete line 1,press enter '1'");
System.out.println("If you want to delete line 2,press enter '2'");
System.out.println("If you want to delete line 3,press enter '3'");
System.out.println("If you want to delete all lines,press '4'");
String comm = reader.readLine();
for (int i = 0; i < note.length; i++){
if (comm.equals("1"))
note[0] = null;
if (comm.equals("2"))
note[1] = null;
if (comm.equals("3"))
note[2] = null;
else if (comm.equals("4"))
note[i] = null;
}

}
в обратном порядке удаление проходит нормально(с 3 до 1) а вот в обычном порядке я удаляю например строку 1 и удаляются все они.ПОМОГИТЕ))
 
 
Сообщения:1
else лишний
 
 
Сообщения:781
Добрый день. Александр.

Общие принципы проектирования.
1. Разделяйте код на функциональные объекты. В вашем коде сразу объединения ввода-вывода и связь с моделью блокнота.
2. Пишите JavaDoc и тесты. Что бы сразу проверять.
3. Создайте отдельный класс NotePad - по сути это будет обертка над массивом. Пример ниже.

package ru.job4j.pad;

import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;

/**
 * Model of note pad.
 *
 * @author Petr Arsentev ([email protected])
 * @version $Id$
 * @since 0.1
 */
public class NotePad {
    /**
     * Default size of notes;
     */
    private static final int DEF_SIZE = 100;

    /**
     * Contains of notes;
     */
    private String[] notes = new String[DEF_SIZE];

    private int last = 0;

    /**
     * Add a new note to pad.
     * @param note note.
     */
    public void add(String note) {
        if (last > notes.length) {
            throw new UnsupportedOperationException("Node pad count not expand");
        }
        this.notes[this.last++] = note;
    }

    /**
     * Delete note by position.
     * @param position position.
     */
    public void delete(int position) {
        System.arraycopy(
                this.notes, position + 1, this.notes,
                position, this.last - position);
        this.last--;
    }

    /**
     * Media result.
     * @param consumer Consumer.
     */
    public void to(Consumer<String> consumer) {
        Stream.of(
                Arrays.copyOf(this.notes, this.last)
        ).forEach(consumer);
    }
}


Смотрите. у меня структура не привязана к вводу и вывода. Я могу ее использовать в другом коде.

По поводу метода delete. - Массивы в Java - это статические структуры, которые нельзя изменять. Как создали так и используем. Поэтому все действия с удалением - это простые перестановки элементов на влево на ту позицию, которую хотим удалить.

Например

1 > 2 > 3

Удаляем

1 > 3 > null

Это можно сделать вручную. Но лучше использовать нативные методы Array.copyOf - Они работают на уровне операционной системы и разы быстрее перестановки.

И обязательно пишите тесты на свой код. Не проверяйте приложение через main.

package ru.job4j.pad;

import org.junit.Test;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;

/**
 * Tests for note pad.
 *
 * @author Petr Arsentev ([email protected])
 * @version $Id$
 * @since 0.1
 */
public class NotePadTest {
    @Test
    public void whenDeleteNoteThenCollapseSize() {
        NotePad pad = new NotePad();
        pad.add("first note ");
        pad.add("second note ");
        pad.add("third note ");
        pad.delete(1);
        StringBuilder log = new StringBuilder();
        pad.to(log::append);
        assertThat(log.toString(), is("first note third note "));
    }

    @Test
    public void whenDeleteFirstThenCollapseSize() {
        NotePad pad = new NotePad();
        pad.add("first note ");
        pad.add("third note ");
        pad.delete(0);
        StringBuilder log = new StringBuilder();
        pad.to(log::append);
        assertThat(log.toString(), is("third note "));
    }

    @Test
    public void whenDeleteLastThenCollapseSize() {
        NotePad pad = new NotePad();
        pad.add("first note ");
        pad.add("third note ");
        pad.delete(1);
        StringBuilder log = new StringBuilder();
        pad.to(log::append);
        assertThat(log.toString(), is("first note "));
    }
}

Учи Java и ищи работу вместе с www.job4j.ru
Изменен:06 авг 2017 06:33
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет