我是一个绝对的编程初学者,我正在尝试从一本书中学习Java。我很困惑。
这本书有一个练习(这就像章节的中间部分,所以有很多建立起来,但我会试着说清楚)要求我们在课堂上添加一个方法。基本上,我们获得了一组预先构建的类,它们应该像一个简单的拍卖程序。因此,有一个数组列表,其中包含一个投标人列表,他们出价多少以及批号。本练习要求我们添加一种方法,打印出中标人名单及其出价值。
好的,这是有道理的。我可以围绕它应该如何工作。我甚至写了下面的代码:`
/**
* Exercise 4.48
* for each item in the list of lots, get the highest bid.
* if highest bid is not null, print the bidder and value
* otherwise, print "lot not sold"
*/
public void close()
{
for(Lot lot : lots) {
Bid highestBid = lot.getHighestBid();
if(highestBid != null) {
System.out.println(bidder, value);
}
else{
System.out.println("Lot not sold.");
}
}
}
当尝试编译它时,它会在bidder上停止,因为我没有定义变量。显然我应该告诉它“投标人”应该是什么意思。 Bidder是同一程序中“Person”对象中变量的名称,在整个项目中使用,但我仍然不清楚如何理解我的“出价人”是同一个“出价者”。我认为我会遇到与“价值”相同的问题。
我错过了什么?
编辑使代码看起来像代码。
根据要求,这是Person ...类? (我对术语不太满意。我会到达那里。抱歉。)
/**
* Maintain details of someone who participates in an auction.
* @author David J. Barnes and Michael Kölling.
* @version 2011.07.31
*/
public class Person
{
// The name of this person.
private final String name;
/**
* Create a new person with the given name.
* @param name The person's name.
*/
public Person(String name)
{
this.name = name;
}
/**
* @return The person's name.
*/
public String getName()
{
return name;
}
}
**/**
* A class to model an item (or set of items) in an
* auction: a lot.
*
* @author David J. Barnes and Michael Kölling.
* @version 2011.07.31
*/
public class Lot
{
// A unique identifying number.
private final int number;
// A description of the lot.
private String description;
// The current highest bid for this lot.
private Bid highestBid;
/**
* Construct a Lot, setting its number and description.
* @param number The lot number.
* @param description A description of this lot.
*/
public Lot(int number, String description)
{
this.number = number;
this.description = description;
this.highestBid = null;
}
/**
* Attempt to bid for this lot. A successful bid
* must have a value higher than any existing bid.
* @param bid A new bid.
* @return true if successful, false otherwise
*/
public boolean bidFor(Bid bid)
{
if(highestBid == null) {
// There is no previous bid.
highestBid = bid;
return true;
}
else if(bid.getValue() > highestBid.getValue()) {
// The bid is better than the previous one.
highestBid = bid;
return true;
}
else {
// The bid is not better.
return false;
}
}
/**
* @return A string representation of this lot's details.
*/
public String toString()
{
String details = number + ": " + description;
if(highestBid != null) {
details += " Bid: " +
highestBid.getValue();
}
else {
details += " (No bid)";
}
return details;
}
/**
* @return The lot's number.
*/
public int getNumber()
{
return number;
}
/**
* @return The lot's description.
*/
public String getDescription()
{
return description;
}
/**
* @return The highest bid for this lot.
* This could be null if there is
* no current bid.
*/
public Bid getHighestBid()
{
return highestBid;
}
}
**
/**
* A class that models an auction bid.
* It contains a reference to the Person bidding and the amount bid.
*
* @author David J. Barnes and Michael Kölling.
* @version 2011.07.31
*/
public class Bid
{
// The person making the bid.
private final Person bidder;
// The value of the bid. This could be a large number so
// the long type has been used.
private final long value;
/**
* Create a bid.
* @param bidder Who is bidding for the lot.
* @param value The value of the bid.
*/
public Bid(Person bidder, long value)
{
this.bidder = bidder;
this.value = value;
}
/**
* @return The bidder.
*/
public Person getBidder()
{
return bidder;
}
/**
* @return The value of the bid.
*/
public long getValue()
{
return value;
}
}
import java.util.ArrayList;
/**
* A simple model of an auction.
* The auction maintains a list of lots of arbitrary length.
*
* @author David J. Barnes and Michael Kölling.
* @version 2011.07.31
*
* 3/12/15 added close method exercise 4.48
*
*/
public class Auction
{
// The list of Lots in this auction.
private ArrayList<Lot> lots;
// The number that will be given to the next lot entered
// into this auction.
private int nextLotNumber;
/**
* Create a new auction.
*/
public Auction()
{
lots = new ArrayList<Lot>();
nextLotNumber = 1;
}
/**
* Enter a new lot into the auction.
* @param description A description of the lot.
*/
public void enterLot(String description)
{
lots.add(new Lot(nextLotNumber, description));
nextLotNumber++;
}
/**
* Show the full list of lots in this auction.
*/
public void showLots()
{
for(Lot lot : lots) {
System.out.println(lot.toString());
}
}
/**
* Make a bid for a lot.
* A message is printed indicating whether the bid is
* successful or not.
*
* @param lotNumber The lot being bid for.
* @param bidder The person bidding for the lot.
* @param value The value of the bid.
*/
public void makeABid(int lotNumber, Person bidder, long value)
{
Lot selectedLot = getLot(lotNumber);
if(selectedLot != null) {
Bid bid = new Bid(bidder, value);
boolean successful = selectedLot.bidFor(bid);
if(successful) {
System.out.println("The bid for lot number " +
lotNumber + " was successful.");
}
else {
// Report which bid is higher.
Bid highestBid = selectedLot.getHighestBid();
System.out.println("Lot number: " + lotNumber +
" already has a bid of: " +
highestBid.getValue());
}
}
}
/**
* Return the lot with the given number. Return null
* if a lot with this number does not exist.
* @param lotNumber The number of the lot to return.
*/
public Lot getLot(int lotNumber)
{
if((lotNumber >= 1) && (lotNumber < nextLotNumber)) {
// The number seems to be reasonable.
Lot selectedLot = lots.get(lotNumber - 1);
// Include a confidence check to be sure we have the
// right lot.
if(selectedLot.getNumber() != lotNumber) {
System.out.println("Internal error: Lot number " +
selectedLot.getNumber() +
" was returned instead of " +
lotNumber);
// Don't return an invalid lot.
selectedLot = null;
}
return selectedLot;
}
else {
System.out.println("Lot number: " + lotNumber +
" does not exist.");
return null;
}
}
/**
* Exercise 4.48
* for each item in the list of lots, get the highest bid.
* if highest bid is not null, print the bidder and value
* otherwise, print "lot not sold"
*/
public void close()
{
for(Lot lot : lots) {
Bid highestBid = lot.getHighestBid();
if(highestBid != null) {
System.out.println(bidder, value);
}
else{
System.out.println("Lot not sold.");
}
}
}
答案 0 :(得分:0)
感谢您通过提供支持代码澄清您的问题!
这应该可以解决您的问题。改变这一行:
System.out.println(bidder, value);
到此:
System.out.println(highestBid.getBidder().getName() + " bids " + highestBid.getValue())
highestBid变量存储Bid类型的对象。您可以查看Bid类定义,以查看对象具有Bid类型的含义。基本上,Bid对象有一个名为getValue()的方法,它返回bid的值,以及一个方法getBidder(),它返回一个Person对象(一个遵守Person类定义的对象)。因此,查看Person类,看看Person对象如何有一个名为getName()的方法,该方法将该名称返回为String。
最后,我们可以使用我们方便的内置System.out.println()函数打印名称和值。
答案 1 :(得分:0)
教你最基本的,
将一个类视为现实生活中的对象,
它有自己的特征,您定义为class variables
。
这些应该(通常)定义为私有,因此对它们的调用必须从类函数(getter和setter)发生。我们这样做的原因是你可以设置一些限制。 (例如:&#34;不高于3&#34;或者&#34;必须是最小值4 char.long&#34; ...)
类函数就像:类中的小隐藏类,它们执行一些代码。注意&#34; In&#34;,函数IN类。而不是相反。因此,您在函数内部创建的变量不为类所知,但函数知道类变量。
我怀疑你打电话给bidder
和value
:
close()
函数的同一个类之外将其定义为私有,则不使用getter。但实际上我们很难知道出了什么问题。请向我们提供close()
功能
编辑:
close()
的代码应该是......
public void close()
{
for(Lot lot : lots) {
Bid highestBid = lot.getHighestBid();
if(highestBid != null) {
System.out.println(highestBid.getBidder(), highestBid.getValue());
}
else{
System.out.println("Lot not sold.");
}
}