在JAVA中使用此Scanner类的用户输入

时间:2013-10-09 04:39:41

标签: java

所以我有这个程序应该接受用户输入,如汽车名称,并在这里计算价格和每月付款:

import java.lang.*;
import java.io.*;
import java.util.*;

public class NewCar
{

private int year;
private String make;
private String model;
private double sticker,discount,tax,finalP,final2,final3;
private int month,monPayt;
private int abbrev1;
private String abbrev2;
private String abbrev3;

   public NewCar(int year, String make, String model)
   {
      this.year= year;
      this.make= make;
      this.model = model;
   }

   public int getYear()
   {
      return year;
   }

   public String getMake()
   {
      return make;
   }

   public String getModel()
   {
      return model;
   }

   public String carDesc()
   {
      return year + " " + make + " "  + model;
   }

   public String carAbbrev()
   {
      abbrev1 = year % 100;
      String abbrev2 = make.substring(0,1);
      String abbrev3 = model.substring(0,1);
      return abbrev1 + abbrev2 + abbrev3;
   }


   public double calcFinalPrice()
   {
      final2 = (sticker - discount);
      final3 = final2 * tax;
      finalP = final2 + final3;
      return finalP;
   }

   public int calcZeroPctMonPayt()
   {
      monPayt = (int)finalP / month;
      return monPayt;
   }


   public String toString()
   {
      return "You want to purchase a " + carDesc() + ". Abbreviation: " + carAbbrev();
   }


}

我用这个测试类对它进行测试:

import java.lang.*;
import java.io.*;
import java.util.*;

public class NewCarTester
{





   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);

      System.out.println("Enter the car's Year, Make and Model: ");
      int year = scan.nextInt();
      String make = scan.next();
      String model = scan.next();

      System.out.println("Enter the Sticker Price: ");
      int sticker = scan.nextInt();

      System.out.println("Enter the discount: ");
      int discount = scan.nextInt();

      System.out.println("Enter the Sales Tax Rate: ");
      int tax = scan.nextInt();

      System.out.println("Enter the number of Months at Zero Percent Interest: ");
      int month = scan.nextInt();

      NewCar c = new NewCar(year, make, model);

      System.out.println(c.toString());
      System.out.println("Final Price : " + c.calcFinalPrice());
      System.out.println(c.calcZeroPctMonPayt());





    }
}

现在一切正常,接受计算方法,每当我调用其中一种计算方法时,每次都得到0.0。这使我相信用户输入的输入没有正确地存储到他们应该进入的变量中。任何人都可以识别问题并帮我修复它吗?谢谢!另外,我遇​​到的另一个问题是,如果用户输入带有小数的销售税,程序会收到错误并停止运行,任何人都对此有任何见解吗?

4 个答案:

答案 0 :(得分:1)

仔细观察。 calcFinalPrice()方法中使用的变异,即

  final2 = (sticker- discount);

  final3 = final2 * tax;

  finalP = final2 + final3;

  return finalP;

上面使用的所有变量都是在创建对象时根据其数据类型获取默认值。

修改你的构造函数如下,你应该得到计算的最终价格。

public NewCar(int year, String make, String model,int sticker,int discount,int tax,int month)
  {      
    this.year= year;
    this.make= make;
    this.model = model;
    this.sticker=sticker;
    this.discount=discount;
    this.tax=tax;
    this.month=month;
}

答案 1 :(得分:1)

你没有传递参数,因为折扣,税率等传递它们,如下所示,默认情况下被分配为零。使用以下代码来解决您的问题

import java.lang.*;
import java.io.*;
import java.util.*;

public class NewCar
{

private int year;
private String make;
private String model;
private double sticker,discount,tax,finalP,final2,final3;
private int month,monPayt;
private int abbrev1;
private String abbrev2;
private String abbrev3;

   public NewCar(int year, String make, String model,double sticker,double discount,double tax,int month)
   {
      this.year= year;
      this.make= make;
      this.model = model;
      this.sticker=sticker;
      this.discount=discount;
      this.tax=tax;
      this.month=month;
   }

   public int getYear()
   {
      return year;
   }

   public String getMake()
   {
      return make;
   }

   public String getModel()
   {
      return model;
   }

   public String carDesc()
   {
      return year + " " + make + " "  + model;
   }

   public String carAbbrev()
   {
      abbrev1 = year % 100;
      String abbrev2 = make.substring(0,1);
      String abbrev3 = model.substring(0,1);
      return abbrev1 + abbrev2 + abbrev3;
   }


   public double calcFinalPrice()
   {
      final2 = (sticker - discount);
      final3 = final2 * tax;
      finalP = final2 + final3;
      return finalP;
   }

   public int calcZeroPctMonPayt()
   {
      monPayt = (int)finalP / month;
      return monPayt;
   }


   public String toString()
   {
      return "You want to purchase a " + carDesc() + ". Abbreviation: " + carAbbrev();
   }


}






 class NewCarTester
{





   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);

      System.out.println("Enter the car's Year, Make and Model: ");
      int year = scan.nextInt();
      String make = scan.next();
      String model = scan.next();

      System.out.println("Enter the Sticker Price: ");
      int sticker = scan.nextInt();

      System.out.println("Enter the discount: ");
      int discount = scan.nextInt();

      System.out.println("Enter the Sales Tax Rate: ");
      int tax = scan.nextInt();

      System.out.println("Enter the number of Months at Zero Percent Interest: ");
      int month = scan.nextInt();

      NewCar c = new NewCar(year, make, model,sticker,discount,tax,month);

      System.out.println(c.toString());
      System.out.println("Final Price : " + c.calcFinalPrice());
      System.out.println(c.calcZeroPctMonPayt());





    }
}

答案 2 :(得分:0)

我在测试的任何地方都没有看到您在NewCar对象中设置Tax,discount等等。

您必须遵循针对每个公共属性的get and set面向对象方法

public double getTax()
{
   return tax;
}

public void setTax(double taxVal)
{
    this.tax = taxVal;
}

然后在您创建的对象中,您可以执行以下操作:

NewCar c = new NewCar(year, make, model);
c.setTax(5.00);

等。

答案 3 :(得分:0)

您永远不会将stickerdiscounttax的值实际提供给NewCar的实例,默认情况下会生成0

您需要提供一些方法来提供从用户获得的值到此类

也许通过构造函数,就像设置yearmakemodel或通过setter方法一样,例如......

public void setSticker(double sticker) {
    this.sticker = sticker;
}