我试图在我的JAVA程序中添加一个平衡系统,但我失败了

时间:2016-05-09 20:06:58

标签: java android

作为一名新程序员,我不知道方法是如何运作的。但是当我使用Object时,它们可以给我任何int,float或double值吗?它可以用作整数,浮点数,双倍!?请帮我。感谢。

import java.util.Scanner;

public class ProjectBookShop {
static Scanner scan= new Scanner(System.in);

static String[] books = {"Java", "C", "CSS"};
static final double studentDiscount = 0.3;
static final double teacherDiscount = 0.4;
static final double alienDiscount = 0.0;
static final int balance = 150;


public static void main(String[] args) {

    prln("<---- WELCOME TO OUR BOOK SHOP --->");
    prln("Today we are offering you" +balance + "Taka");
    prln("Which books do you want:\n Ans:");
    String usersChoice= scan.nextLine();

    if(books[0].toLowerCase().equals(usersChoice.toLowerCase()))
    {
        prln("You opted for Java.");
        calculatePrice(books[0]);

       //Problem starts from this line.
        if(balance => showPrice(calculatePrice(books[0])))
        {
            prln("You are eligible for buying this book!");
        }


    }else if(books[1].toLowerCase().equals(usersChoice.toLowerCase()))
    {
         prln("You opted for C.");
         calculatePrice(books[1]);
    }else if(books[2].toLowerCase().equals(usersChoice.toLowerCase()))
    {
        prln("You opted for Css.");
        calculatePrice(books[2]);
    }
    else
    {
        prln("We dont have this book.");
    }

}
// These are called methods!

static void calculatePrice(String bookName)
{
    double price = 200;
    prln("Are you a student, teacher or alien:\n Ans:");
    String answer = scan.nextLine();
    if(answer.toLowerCase().equals("student"))
    {
        price = price - (price*studentDiscount);
        showPrice(price);

    }else if(answer.toLowerCase().equals("teacher"))
    {
        price = price - (price * teacherDiscount);
        showPrice(price);
    }else if(answer.toLowerCase().equals("alien"))
    {
    price = price - (price * alienDiscount);
    showPrice(price);
    }else
    {
    prln("We dont offer any books for you!!");
    showPrice(price);
    }

}
static void showPrice(Object price)
{
prln("Your total price will be: "+ price);
prln("<---- Thanks for shoping with us. --->");
}

static void prln(Object anyObject)
{
    System.out.println(anyObject);
}

static void pr(Object anyObject)
{
    System.out.print(anyObject);
}
}

2 个答案:

答案 0 :(得分:0)

是的,intdoubleboolean原始类型可以分配给Object。它是使用包装类型

完成的
  • byte - Byte
  • short - Short
  • int - Integer
  • long - Long
  • float - Float
  • double - Double
  • char - Character
  • boolean - Boolean
  • void - Void 注意Void很特别。由于void没有任何价值,因此Void分配的唯一值为null

Object s不能用作基本类型,除非你强制它们为正确的类型:

Object ob = myObjectStream.readObject();
Integer intg = (Integer) ob;

警告:尝试将float包裹为Float并将Object指定为Integer会导致ClassCastException被抛出。为了防止它,您可以使用instanceof

Object ob = myObjectStream.readObject();
if(ob instanceof Integer) {
  int x = (Integer) ob;
  // Do something
} else if(ob instanceof Float) {
  float f = (Float) ob;
  // Do something else
} else {
  System.err.println("I don't support provided object class!!!");
}

您是否注意到来自float的{​​{1}}作业?这适用于双方:

Float

自动装箱/拆箱。如果您不想使用它,您仍可以手动执行:

float x = 1.0f;
Float y = x;
float z = y; // == 1.0f

这适用于除float x = 1.0f; Float y = Float.valueOf(x); float z = y.floatValue(); // == 1.0f 之外的所有包装类型。

此外,而不是:

Void

使用:     字符串s1,s2;     if(s1.equalsIgnoreCase(s2){       // ...     } 这适用于一些角落的Unicode字符。

运营商String s1, s2; if(s1.toLowerCase().equals(s2.toLowerCase()) { // ... } 不存在。您的意思是=>吗?

如果方法>=始终被showPrice s包含在double中,那么将其包裹起来是没有意义的;包装需要时间。如果仅给出Double s,则将其重写为以下内容:

Double

这种方法相同且速度更快。

static void showPrice(double price) { prln("Your total price will be: "+ price); prln("<---- Thanks for shoping with us. --->"); } 从未使用过!删除它并保存代码。此外,加载类时,将加载其所有方法。因此,如果删除它,您还可以使程序启动更快。

正如一些评论所示,您尝试比较pr。再次重写void:     静态双showPrice(双倍价格)     {     prln(&#34;您的总价将是:&#34; +价格);     prln(&#34;&lt; ----感谢您和我们一起购物.---&gt;&#34;);     退货价格;     } 这使比较成功。

答案 1 :(得分:0)

您不希望将Object用作方法参数。 Object是Java中每个其他对象派生自的基础对象,但在您的情况下,当一个参数传递给一个具有Object参数的方法(例如double)时,接收方法不再是&#34; #34;它是一个双精度数,因此无法将其解释为数字。

您应该更改prlnpr方法,而是使用:

static void showPrice(double price)
{
    prln("Your total price will be: "+ price);
    prln("<---- Thanks for shoping with us. --->");
}

static void prln(String str)
{
    System.out.println(str);
}

static void pr(String str)
{
    System.out.print(str);
}