Мне недавно пришлось написать программу для моего университетского класса программирования. Через несколько часов i , наконец, закончил его, и все сработало просто отлично (так я думал). Программа должна содержать два класса, один из которых (основной) BookTest должен создать объект, а затем вызвать все методы из класса Book.The заключается в том, что атрибуты (id, title, author, dateOfPublication) не должны быть static.Is есть способ заставить его работать без атрибутов, являющихся статическими. Это два класса, где я получаю ошибки, потому что у меня нет атрибутов static.Everywhere, где мои атрибуты появляются в методах, он дает мне ошибку, не может сделать статическую ссылку на нестационарный метод methodname()
из типа Book.Every help is очень ценим!Когда использовать статические атрибуты?
import java.util.Date;
import java.util.Scanner;
import java.text.*;
public class Book
{
private int id;
private String title;
private String author;
private Date dateOfPublication;
public static final String DATE_FORMAT = "dd.MM.yyyy";
//--- constructors ---
public Book(int ID,String TITLE,String AUTHOR,Date DATEOFPUBLICATION){
setId(ID);
setTitle(TITLE);
setAuthor(AUTHOR);
setDateOfPublication(DATEOFPUBLICATION);
}
public Book() {
}
/** Returns the age of the book in days since publication */
public int age(){
Date date = new Date();
long difference = date.getTime() - Book.getDateOfPublication().getTime();
long differenceDays = difference/(1000 * 60 * 60 * 24);
return (int) differenceDays; //this is to avoid compiler errors, replace it!
}
/** Returns a String representation of the book */
public String toString(){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
String dateAsString = simpleDateFormat.format((Book.getDateOfPublication()));
String Documentation;
Documentation = String.valueOf(Book.getId())+", " + Book.getTitle()+", " + Book.getAuthor()+", " + dateAsString;
return Documentation; //this is to avoid compiler errors, replace it!
}
/** Reads all book data from user input */
public void input(){
Scanner scn = new Scanner(System.in);
System.out.println("Please enter id: ");
Book.setId(scn.nextInt());
scn.nextLine();
System.out.println("Please enter title: ");
Book.setTitle((scn.nextLine()));
System.out.println("Please enter author: ");
Book.setAuthor(scn.nextLine());
System.out.println("Please enter Date of Publication: ");
String string_dateOfPublication = scn.nextLine();
Book.setDateOfPublication(stringToDate(string_dateOfPublication));
scn.close();
}
//--- Get-/Set-methods ---
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//--- helper methods -- DO NOT CHANGE ------------------------------------
/** Converts the Date object d into a String object */
public static String dateToString(Date d)
{
SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT);
return fmt.format(d);
}
/** Converts the String object s into a Date object */
public static Date stringToDate(String s)
{
Date r = null;
try {
SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT);
r = fmt.parse(s);
} catch (ParseException e){
System.err.println(e);
System.exit(1);
}
return r;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Date getDateOfPublication() {
return dateOfPublication;
}
public void setDateOfPublication(Date dateOfPublication) {
this.dateOfPublication = dateOfPublication;
}
}
public class BookTest{
public static void main (String []args){
Book Bookobj = new Book();
Bookobj.input();
System.out.println(Book.age()+" Tage alt.");
System.out.println(Bookobj.toString());
}
}
С вашим ответом я смог понять это. Теперь я понимаю, почему мои атрибуты не должны быть статическими и как изменить другой код, чтобы он работал. Спасибо миллион! – Kisos