作为一名新程序员,我不知道方法是如何运作的。但是当我使用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);
}
}
答案 0 :(得分:0)
是的,int
,double
或boolean
等原始类型可以分配给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;它是一个双精度数,因此无法将其解释为数字。
您应该更改prln
和pr
方法,而是使用:
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);
}