我正在尝试将所有输出放在3个不同类的一个JOption窗格中。目前,每当我打印电子书时,它们都会打印在各自的对话框中,必须一次按一个OK,以循环显示所有书籍。
我需要将它们包含在一个对话框中,以及“Programmed By”和Ebook Count / Cost部分。
我很好奇,如果我必须导入每个类。谢谢。
import javax.swing.JOptionPane; // dialog box
public class Ebook
{
private String author = "";
private String title = "";
private double price = 0.0;
private String isbn = "";
public Ebook(String author, String title, double price, String isbn) // ebook constructor
{
this.author = author;
this.title = title;
if (price > 0) // validate non-negative price
this.price = price;
else
{
this.price = 0.0;
System.out.println("Invalid price");
}
if (isbn.length() == 10 || isbn.length() == 13) // isbn length must be exactly 10 or 13
this.isbn = isbn;
else
this.isbn = "None";
}
public void setPrice(double price)
{
if (price < 0) // validate
{
System.out.println("Invalid price");
}
else
this.price = price;
}
public double getPrice()
{
return price;
}
public void setAuthor(String theAuthor)
{
this.author = theAuthor;
}
public String getAuthor()
{
return author;
}
public void setIsbn(String isbn)
{
if (isbn.length() == 10 || isbn.length() == 13) // validate
{
this.isbn = isbn;
}
else
isbn = "None";
}
public String getIsbn()
{
return isbn;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public String toString()
{
return String.format("Author: %s%nTitle: %s%nPrice: $%.1f%nISBN: %s%n",
author,title,price,isbn);
}
} // This was made by --
import javax.swing.JOptionPane; // dialog box
public class EbookLibrary
{
private int count = 0;
private double total_cost = 0.0;
Ebook[] ebooks = new Ebook[25]; // array of ebook objects
public EbookLibrary() // no argument constructor for ebooklibrary object in library test
{
}
public int getCount() // total number of ebooks
{
return count;
}
public double getCost() // sum of all ebooks
{
return total_cost;
}
public String toString() // formatted string with the number and cost of all ebooks
{
String message2 = String.format("Ebook count: %d%nTotal Cost: $%.1f", count, total_cost); // for dialog box
return message2;
}
public void addEbook(String author, String title, double price, String isbn) // adds ebooks to the array
{
if (count < 25) // dont walk off array
{
Ebook anEbook = new Ebook(author,title,price,isbn); // ebook object to be created when addEbook is called
ebooks[count] = anEbook;
total_cost += price; // total of all the books
String message = String.format("%s%n", ebooks[count]);
JOptionPane.showMessageDialog(null,message); // display books in dialog boxes
count++; // increment count each time
}
}
} // This was made by ------
import javax.swing.JOptionPane; // dialog box
public class EbookLibraryTest
{
public static void main(String[] args)
{
EbookLibrary aLibrary = new EbookLibrary(); // EbookLibrary object for calling addEbook
// ebook objects
aLibrary.addEbook("Blah", "What", 88.8, "1234567891")
aLibrary.addEbook("Thing Do", "What What", 45.0, "1234567891111");
aLibrary.addEbook("Stephen King","The Thing",1.1, "1234567891");
aLibrary.addEbook("Robert","A Title", -1.0, "1234567891"); // test invalid price, should return 0.0 and "invalid price"
aLibrary.addEbook("Tom","Bad Title", 33.1, "1234567891111");
aLibrary.addEbook("Bob", "FML and Other Acronyms", 25.0, "1"); // test ISBN value, should return "None"
aLibrary.getCount();
aLibrary.getCost();
String message = "Programmed by ---- ";
String message2 = String.format("%s%n", aLibrary.toString());
JOptionPane.showMessageDialog(null,message + "\n " + message2);
}
}
答案 0 :(得分:1)
首先,您需要在添加Ebook
时删除添加对话框的部分。相反,你想拥有一个可以同时完成所有操作的方法。
public void printOrder(String signature){
String message = "";
for (int q = 0; q < count; q++){
message += String.format("%s%n", ebooks[q]);
}
message += signature;
JOptionPane.showMessageDialog(null,message);
}
该代码将放在EBookLibrary
中。我还想注意,您可能希望查看List
以存储Ebook
,因为它可以根据您需要的大小来增长和缩小。
现在,在您打印签名的最后,您可以将其更改为printOrder()
方法,并解析您打印的文本。
String message = "Programmed by ---- ";
String message2 = String.format("%s%n", aLibrary.toString());
aLibrary.printOrder(message + "\n " + message2);
答案 1 :(得分:1)
您正在显示7个消息对话框而不是1.
只需创建一个方法,在ur Lua scope = new Lua();
Lua scope2 = new Lua();
scope2.DoString("t = { Data = 3 }");
scope.DoString("function values(key, model) return key, model end");
var func = (LuaFunction)scope["values"];
var t = (LuaTable)scope2["t"];
object[] results = func.Call("Hello", t);
var tableFunc = results[1] as LuaFunction;
var tableTable = results[1] as LuaTable;
object[] tableFuncResult = tableFunc.Call();
类中返回有关每个addedEbook的信息,然后主要使用循环并一次添加一个书。每次添加新图书时,图书所返回的信息(EBookLibrary
)都会自动添加到string
中的message2
。
或者,您可以编辑main
方法,而不是创建新方法:
addEbook
并在String message = String.format("%s%n", ebooks[count]);
count++;
return message; //instead of JOptionPane
方法中:
main
试试这个,或者尝试从图书馆中取出JOptionPanes,只显示 EbookLibrary aLibrary = new EbookLibrary(); // EbookLibrary object for calling addEbook
String message = "Programmed by ---- ";
while(count < 25) {
// ebook objects
message += aLibrary.addEbook("Blah", "What", 88.8, "1234567891") + '/n':
message += aLibrary.addEbook("Thing Do", "What What", 45.0, "1234567891111") + '/n';
message += aLibrary.addEbook("Stephen King","The Thing",1.1, "1234567891") + '/n';
message += aLibrary.addEbook("Robert","A Title", -1.0, "1234567891") + '/n'; // test invalid price, should return 0.0 and "invalid price"
message += aLibrary.addEbook("Tom","Bad Title", 33.1, "1234567891111") + '/n';
message += aLibrary.addEbook("Bob", "FML and Other Acronyms", 25.0, "1") + '/n'; // test ISBN value, should return "None"
aLibrary.getCount();
aLibrary.getCost();
//String message2 = String.format("%s%n", aLibrary.toString());
JOptionPane.showMessageDialog(null,message);
中的单个窗格。