Скопируйте объект из одного массива в «начало» другого массива, используя алгоритм вставки

Мне поручили разработать простую программу на Java, основанную на следующем:

Write an algorithm to search for reserved book copies, from a list (array) of books using Linear Search, and then store them at the beginning of a newly created array, using an insert algorithm.

Я написал алгоритм, но мне трудно его продемонстрировать из-за проблемы с последней строкой следующего кода:

package javaapplicationadt2;

public class Books
{

    public String ISBN;               // class properties
    public String title;
    public int copies;
    boolean reserved = true;

    public static void main(String[] args)
    {

        Books[] Book1 = new Books[1];
        Books[] Book2 = new Books[1];

        Book1[0].ISBN = "ISBN-00001";
        Book1[0].title = "Algorithms that torture minds";
        Book1[0].copies = 2;
        Book1[0].reserved = true;

        Book2[0].ISBN = "ISBN-00002";
        Book2[0].title = "Lecture Slides that defied practical Java Programming !";
        Book2[0].copies = 1;
        Book2[0].reserved = false;

        for (int i = 0; i < Book1.length; i++)
            if (Book1[i].reserved = true)
                for (int j = Book2.length - 1; j > 0; j++)
                    Book2[j] = Book2[j - 1];
     *Book2[0] = Book1[i].title;*   **(Incompatible types:
    Books cannot be converted to a String)**

    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашей логике и соглашениях о коде много ошибок

Java использует CamelCase как практику для написания имен методов, переменных, классов, пакетов и констант. Имена классов должны быть существительными в смешанном регистре с заглавной первой буквой каждого внутреннего слова. Имя интерфейса также должно быть написано с заглавной буквы, как и имена классов. Взгляните на Соглашения о Java-коде

Book[] bookArray = new Book[1];

Вернемся к вашему коду. Когда ты делаешь

Book[] book1 = new Book[1]; //Create an Array of Books -> all elements are NULL
book1[0].ISBN = "ISBN-00001"; // book1[0] is NULL so a NullPointException will be throw

Вы должны инициализировать свой массив и / или назначить ему объект

Book[] bookArray = new Book[1];
Book book = new Book();
Book[0] = book; //Now you have an Object Book at Book[0] and you can set the properties    
bookArray[0].ISBN = "ISBN-00001";

For и If ... если вы не определяете блок, будет выполнена только следующая строка. т.е.

 if (true == bookArray[0].reserved)
     System.out.println("1");//This will be executed only if condition is true
     System.out.println("2"); //This will be executed no matter what

Если вы хотите выполнить код, только если условие истинно, вы должны:

if (true == bookArray[0].reserved){
     System.out.println("1");//This will be executed only if condition is true
     System.out.println("2"); //This will be executed only if condition is true
}

Я пробовал оба этих варианта в последней строке моего кода (написанного выше), и он показывал синтаксическую ошибку .... Я не знаю, что делать ... Тем не менее, спасибо за вашу помощь.

Emanuel 31.03.2018 15:46

Таким образом, мой код точно такой же, как и первоначально опубликованный, за исключением последней строки кода Книга2 [0] = Книга1 [i] .title;(Несовместимые типы: книги нельзя преобразовать в строку). Я заменил ее либо Book2 [0] = Book1 [I] OR Book [0] .title = Book [I] .title, либо и тем, и другим). присутствуют ошибки.

Emanuel 31.03.2018 17:17

Другая проблема, с которой я столкнулся, заключается в том, что когда я запускаю этот код, консоль выводит ответ из другой программы, которую я создал в том же пакете. Итак, я изменил пакет, но результат остался прежним !! (Я чувствую себя очень глупо на этом этапе)

Emanuel 31.03.2018 17:20

Спасибо, Грациано - возвращаясь к последней строке моего исходного кода, (а) если я напишу Book2 [0] .title = Book1 [1] .title; сообщение об ошибке выглядит следующим образом: «Исключение в потоке« main »java.lang.NullPointerException в javaapplicationadt2.Books.main (Books.java:15) C: \ Users \ Emanuel \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor- s‌ nippets \ run.xml: 53: Java вернула: 1 BUILD FAILED (общее время: 0 секунд) "

Emanuel 31.03.2018 22:37

(б) Если я напишу Book2 [0] = Book1 [1]; ошибка - исключение в потоке «main» java.lang.NullPointerException в javaapplicationadt2.Books.main (Books.java:15) C: \ Users \ Emanuel \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ Executionor-s‌ nippets \ run.xml: 53: Java вернула: 1 BUILD FAILED (общее время: 0 секунд)

Emanuel 31.03.2018 22:43

Просто чтобы добавить ... Я изменил Boolean Reserved = true на public Boolean Reserved;

Emanuel 31.03.2018 23:02

btw if (Book1 [i] .reserved = true) -> вы не сравниваете, вы всегда присваиваете true. Чтобы сравнить логическое значение, используйте ==

Graciano 01.04.2018 00:16

Другие вопросы по теме