2016-05-09 3 views
-2

Als ein neuer Programmierer, ich weiß nicht, wie Methoden wirklich funktionieren. Aber wenn ich Object benutze, können sie mir irgendwelche int, float oder double Wert geben? Und kann es als Integer, Float, Double! Bitte hilf mir. Vielen Dank.Ich habe versucht, ein Balance-System in meinem JAVA-Programm hinzuzufügen, aber ich scheiterte

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); 
} 
} 
+1

Die Methode 'showPrice' einen beliebigen Wert nicht zurück. Daher kann es nicht in einem Vergleich verwendet werden. Tatsächlich gibt 'calculatePrice' auch keinen Wert zurück und kann daher nicht als Parameter für' showPrice' verwendet werden. Und 'calculatePrice' ruft' showPrice' auf, was ebenfalls ein Problem darstellen könnte. – KevinO

+0

'Rückgabepreis' aus' calculatePrice' und verwenden Sie es als Ihren Vergleich. Das ist eigentlich Schritt 2, Schritt 1 (leider) soll auf die Grundlagen von Java eingehen. Es wird Ihnen viele Kopfschmerzen in der Zukunft ersparen. – zgc7009

+0

Aaah !! Beginne dieses Projekt, bevor du Rückgabetypen lernst !! :(Ich dachte, es könnte einfach sein !! By the way, Danke für die Hilfe !! :) – Sid

Antwort

0

Ja, Urtyp wie int, double oder boolean kann Object s zugeordnet werden. Es erfolgt mit Wrapper-Typen:

  • byte - Byte
  • short-Short
  • int - Integer
  • long - Long
  • float - Float
  • double-Double
  • char - Character
  • boolean - Boolean
  • void - Void Hinweis Void ist etwas Besonderes. Da void keinen Wert hat, ist der einzige Wert, der Void zugewiesen werden kann, null.

Object s kann nicht als primitive Typen verwendet werden, es sei denn Sie sie richtige Art zu werfen:

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

Warnung: Sie versuchen, eine float gewickelt, wie Float und als Object-Integer in führt zugewiesen zu werfen ClassCastException wird geworfen. Um dies zu verhindern, können Sie verwenden 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!!!"); 
} 

Haben Sie bemerkt, eine Zuordnung zu float von Float? Dies funktioniert in beiden Seiten:

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

Das heißt automatische Boxen/Unboxing. Wenn Sie es nicht verwenden möchten, können Sie es immer noch von Hand:

float x = 1.0f; 
Float y = Float.valueOf(x); 
float z = y.floatValue(); // == 1.0f 

Diese für alle Wrapper-Typen außer Void funktioniert.


auch statt:

String s1, s2; 
if(s1.toLowerCase().equals(s2.toLowerCase()) { 
    // ... 
} 

Verwendung: String s1, s2; if (s1.equalsIgnoreCase (s2) { // ... } Dies behandelt ordnungsgemäß mit einigen Ecke Unicode-Zeichen.


Operator => existiert nicht. Meinst Du >=?


Wenn Methode showPrice immer double s gegeben ist, eingewickelt in Double s, gibt es keinen Sinn, es sie zu machen wickeln; die Verpackung braucht Zeit. Wenn es nur Double s gegeben ist, schreiben sie folgendes:

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

Dies ist die gleiche funktioniert und ist schneller.


pr wird nie benutzt! Entfernen Sie es und speichern Sie den Code. Wenn die Klasse geladen wird, werden alle ihre Methoden geladen. Wenn Sie es entfernen, können Sie das Programm auch schneller booten.


Wie einige Kommentare vorschlagen, versuchen Sie void zu vergleichen. Schreibe showPrice noch einmal: statische Doppel-ShowPrice (Doppelpreis) { prln ("Ihr Gesamtpreis wird:" + Preis); prln ("< ---- Danke für den Einkauf mit uns. --->"); rückkehrpreis; } Dies macht den Vergleich funktioniert.

0

Sie möchten nicht Objekt für Ihre Methodenargumente verwenden. Object ist das Basisobjekt, von dem jedes andere Objekt in Java abgeleitet ist, aber in Ihrem Fall, wenn ein Parameter an eine Methode mit einem Object-Argument übergeben wird (z. B. ein Double), "sieht" die Empfangsmethode ihn nicht mehr ein Doppel, so kann es nicht als eine Zahl interpretieren.

Sie sollten Ihre prln und pr Methoden ändern und stattdessen verwenden:

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); 
} 
Verwandte Themen