附加代码的第100行 cost = JOptionPane.showInputDialog("Cost");
报告错误“类型不匹配:无法从字符串转换为双倍” - 任何建议是什么造成了这个请?
基本上它是一个访问另一个类'BookShelf'的类,这一行是actioncommand的一部分,它访问BookShelf类以返回costofBookshelf
import java.awt.FlowLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class BookGUI extends JFrame implements ActionListener
{
//String addBook="";
// public ArrayList<Book> books;
Book books = new Book ("", "", 0, "", 0);
Book book = new Book("", "", 0, "", 0);
String title = "";
String author = "";
int year = 0;
String publisher = "";
double cost = 0;
public BookShelf bookShelf = new BookShelf();
public static final int WIDTH = 300;
public static final int HEIGHT = 200;
//Creates & displays a window of the class FlowLayoutDemo
public static void main(String[] args)
{
BookGUI gui = new BookGUI( );
gui.setVisible(true);
}
// public String getTitle()
// {
// return title;
//}
public void setTitle(String title) //this is relevant
{
this.title = title;
}
public void setAuthor(String author) //this is relevant
{
this.author = author;
}
public void setYear(int year) //this is relevant
{
this.year = year;
}
public void setPublisher(String publisher) //this is relevant
{
this.publisher = publisher;
}
public void setCost(double cost) //this is relevant
{
this.cost = cost;
}
public BookGUI( )
{
setSize(WIDTH, HEIGHT);
addWindowListener(new WindowDestroyer( ));
setTitle("GUI Assignment");
Container content = getContentPane( );
content.setLayout(new FlowLayout());
JButton button1 = new JButton("Title");
content.add(button1);
button1.addActionListener(this);
//contentPane.add(button1);
JButton button2 = new JButton("Cost of Bookshelf");
content.add(button2);
button2.addActionListener(this);
JButton button3 = new JButton("Size of BookShelf");
content.add(button3);
button3.addActionListener(this);
JButton button4 = new JButton("Add Book");
content.add(button4);
button4.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("Add Book"))
//book = JOptionPane.showInputDialog("Add Book");
{ //set up the book object with all the data passed in
title = JOptionPane.showInputDialog("Title");
author = JOptionPane.showInputDialog("Author");
publisher = JOptionPane.showInputDialog("Publisher");
***cost = JOptionPane.showInputDialog("Cost");***
book.setTitle(title);
book.setAuthor(author);
book.setPublisher(publisher);
bookShelf.addBook(book);
String message = "The title of the book is :" + title +
"the Author of the Book is : " + author + " and it's published by " + publisher;
JOptionPane.showMessageDialog(null, message, "Book Details", JOptionPane.PLAIN_MESSAGE);
}
else if (e.getActionCommand().equals("Size of BookShelf")) {
int sizeOfBookShelf = bookShelf.sizeOfBookshelf();
String message = "The book shelf has " + sizeOfBookShelf + " book(s)";
JOptionPane.showMessageDialog(this, message);
}
else if (e.getActionCommand().equals("Cost of BookShelf"))
{
double costOfBookshelf = bookShelf.costOfBookshelf();
String message = "The book shelf value is " + costOfBookshelf + "Euro";
JOptionPane.showMessageDialog(this, message);
}
}
}
答案 0 :(得分:1)
JOptionPane.showInputDialog返回一个String。您不能将String值分配给double类型的变量。
您可以使用Double.parseDouble将String转换为double。
答案 1 :(得分:1)
cost
是双精度数,showInputDialog
返回一个字符串。所以你需要这样做:
cost = Double.parseDouble(JOptionPane.showInputDialog("Cost"));
但是,如果这是用于生产代码,您应该添加一些验证以确保输入的值实际上是数字。
答案 2 :(得分:1)
cost = Double.parseDouble(JOptionPane.showInputDialog("Cost"));
虽然使用double to represent money may give you bad results,但您应该考虑using BigDecimal instead。
答案 3 :(得分:0)
您必须将字符串输入解析为double。
try {
code = Double.parseDouble(JOptionPane.showInputDialog("Cost"));
}
catch (NumberFormatException ex){
code = 0.0;
}