【问题标题】:How can I prevent NaN from appearing when printing?打印时如何防止出现 NaN?
【发布时间】:2019-09-26 01:48:42
【问题描述】:

这是我的任务。

  1. 编写一个名为 Stock 的类,其中包含:

    • 股票代码的名为 symbol 的字符串数据字段。
    • 一个名为 name 的字符串数据字段,用于股票名称。
    • 一个名为 perviousClosingPrice 的双数据字段,用于存储前一天的股票价格。
    • 一个名为 currentPrice 的双数据字段,用于存储当前时间的股票价格。
    • 创建具有指定代码和名称的股票的构造函数。
    • 名为 getChangePercent() 的方法返回从 previousClosingPrice 更改为 currentPrice 的百分比。
  2. 编写一个 StockTest 类,该类创建一个 Stock 对象,该对象的股票代码为 ORCL,名称为 Oracle Corporation,之前的收盘价为 34.5。将新的当前价格设置为 34.35,并显示价格 - 变化百分比。

我的代码是这样的

public class Stock{
  private String Symbol, Name;
  private double previousClosingPrice, currentPrice;
  public Stock(String stockName, String stockSymbol){
    Name = stockName;
    Symbol = stockSymbol;
  }
  public double getChangePercent(){
    return (previousClosingPrice - currentPrice)/previousClosingPrice * 100;
  }
}

 import java.util.Scanner;
public class StockTest{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    String stockSymbol = "ORCL";
    String stockName = "Oracle Corporation";
    double previousClosingPrice = 34.5;
    double currentPrice = 34.35;
    Stock stock = new Stock(stockName, stockSymbol);
    double percentChange = stock.getChangePercent();
    System.out.println("The company" + stockName + "has a stock price of" + currentPrice +".");
    System.out.println("Which is an increase of " + stock.getChangePercent() + " % increase");
  }
}

我只是得到这个输出:

The companyOracle Corporationhas a stock price of34.35.
Which is an increase of NaN% increase

我想显示一个实际数字而不是 NaN

【问题讨论】:

  • double previousClosingPrice = 34.5; 你不应该使用这个,你应该使用Stock 变量。您将需要一种方法来设置这些字段
  • 我还是个新手,请您详细说明一下,我不完全理解这一点
  • NaN 是一个伪数(不是数字)。这表明您在某处犯了数学错误,可能被零除。
  • getChangePercent 中,您除以previousClosingPrice,但从未设置过此值。
  • 表示它被初始化为0.0作为默认值。

标签: java class methods printing numbers


【解决方案1】:

当您在 main 方法中编写 double previousClosingPrice = 34.5; 时,这将创建一个与 stock 类中名为 previousClosingPrice 的字段完全分开的变量。是的,他们有相同的名字。这并不能使它们神奇地成为同一件事。

在你的 main 方法中根本不应该有那行。

正如所写,您的 main 方法无法调整任何给定股票实例中的 previousClosingPrice 字段;该字段是私有的,没有任何方法可以更改它。我建议你创建一个名为public void setPreviousClosingPrice(double value) {this.previousClosingPrice = value;} 的方法。

【讨论】: