0

重複の可能性:
Java で文字列を比較するにはどうすればよいですか?
Java での文字列比較…?

私は非常に単純な問題に取り組んでいます...
製品リストがハードコードされた基本的な101ショッピングカート(練習問題のみ-これが実際に行われる方法ではないことを理解しています)

ユーザーに文字列 (製品コード) を入力してもらい、関連する製品の説明を Description メソッドから取得してもらいたい

値 0 を返しています。つまり、メソッド内の if ステートメントが、ユーザーが入力した文字列を認識していないようです。

ハードコーディングされた文字列は機能します-キーボードで入力された文字列は機能しません私は困惑していますが、基本的な何かが欠けていると思います

import java.util.*;

class CW1ShoppingCart1_2ShowProdAndGetChoice
{
public static void main(String[] args)

{
/*PART 1 Offer catalogue and get user choice*/

System.out.println("ITEMS AVAIALBLE TODAY: \n");
System.out.print("P4383"+ "\t"+ CW1ShoppingCart1GetProductDetails.Description("P4383"));
System.out.println("\t"+ "$"+ CW1ShoppingCart1GetProductDetails.Price("P4383"));
System.out.print("P4385"+ "\t"+ CW1ShoppingCart1GetProductDetails.Description("P4385"));
System.out.println("\t"+ "$"+ CW1ShoppingCart1GetProductDetails.Price("P4385"));
System.out.print("P4387"+ "\t"+ CW1ShoppingCart1GetProductDetails.Description("P4387"));
System.out.println("\t"+ "$"+ CW1ShoppingCart1GetProductDetails.Price("P4387"));
System.out.println("\nTO START SHOPPING ENTER A PRODUCT CODE AND HIT RETURN \n");

Scanner in = new Scanner (System.in);
String ProdCode =in.nextLine();

System.out.println("You Chose: "+ CW1ShoppingCart1GetProductDetails.Description(ProdCode));

}
}

class CW1ShoppingCart1GetProductDetails
{

static String Description(String ProdCode)
{

String Proddesc;

if(ProdCode=="P4387")Proddesc = "Little used helper monkey - 1 ";
else if(ProdCode=="P4385") Proddesc = "Chilli chocolate - 100g ";
else if(ProdCode=="P4383")  Proddesc = "State-owned Bank - real value - 1 entity ";
else Proddesc = "0";

return Proddesc;
}

static double Price(String ProdCode)
{

double ProdPrice;

if(ProdCode=="P4387")  ProdPrice = 1200;
else if(ProdCode=="P4385") ProdPrice = 3.27;
else if(ProdCode=="P4383")  ProdPrice = -0.08;
else ProdPrice = 0;

return ProdPrice;
}

} 
4

3 に答える 3

10

問題は、==文字列の比較に使用していることです。equals代わりに使用してください。

if(ProdCode.equals("P4387"))Proddesc = "Little used helper monkey - 1 ";

等々

于 2013-01-13T09:28:16.900 に答える
0

代替ソリューションとして、列挙型を使用できます

次のように

public enum ShoppingCart {
    P4387(1200, "Little used helper monkey - 1 "),
    P4385(3.27, "Chilli chocolate - 100g "),
    P4383(-0.08, "State-owned Bank - real value - 1 entity ");

    private final double price;
    private final String description;

    private ShoppingCart(double price, String description) {
        this.price = price;
        this.description = description;
    }

    public double getPrice() {
        return price;
    }

    public String getDescription() {
        return description;
    }
}

次のようなものを使用します。

System.out.printf("Shopping card with name %s have price = %f and description %s",
        currentShoppingCart.name(),
        currentShoppingCart.getPrice(),
        currentShoppingCart.getDescription());
于 2013-01-13T09:47:58.287 に答える
0

== を使用して文字列を比較しないでください。'==' を使用しても正しい結果が得られる場合がありますが、これは文字列プールに同じ文字列が存在するためです。文字列を比較するには、常に String クラスで使用可能な equals メソッドを使用してください。

于 2013-01-13T09:35:05.340 に答える