Мне поручили разработать простую программу на 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)**
}
}




В вашей логике и соглашениях о коде много ошибок
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
}
Таким образом, мой код точно такой же, как и первоначально опубликованный, за исключением последней строки кода Книга2 [0] = Книга1 [i] .title;(Несовместимые типы: книги нельзя преобразовать в строку). Я заменил ее либо Book2 [0] = Book1 [I] OR Book [0] .title = Book [I] .title, либо и тем, и другим). присутствуют ошибки.
Другая проблема, с которой я столкнулся, заключается в том, что когда я запускаю этот код, консоль выводит ответ из другой программы, которую я создал в том же пакете. Итак, я изменил пакет, но результат остался прежним !! (Я чувствую себя очень глупо на этом этапе)
Спасибо, Грациано - возвращаясь к последней строке моего исходного кода, (а) если я напишу 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 секунд) "
(б) Если я напишу 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 секунд)
Просто чтобы добавить ... Я изменил Boolean Reserved = true на public Boolean Reserved;
btw if (Book1 [i] .reserved = true) -> вы не сравниваете, вы всегда присваиваете true. Чтобы сравнить логическое значение, используйте ==
Я пробовал оба этих варианта в последней строке моего кода (написанного выше), и он показывал синтаксическую ошибку .... Я не знаю, что делать ... Тем не менее, спасибо за вашу помощь.