2

私はまだJavaに慣れていないので、現在の合計を維持する方法がわかりません。私が何を調べるべきかについての提案は素晴らしいでしょう。お時間をいただきありがとうございます。

import javax.swing.*;

public class OrderingProducts2

{

   public static double main(String[] args)

      {
         // Number of products 
         final int NUMBER_OF_PRODUCTS = 5;
         //all of the valid values 
         int[] validValues = {1, 2, 3, 4, 5};
         //prices that coralate with the values
         double[] prices = {2.98, 4.50, 9.98, 4.49, 6.87};
         //Starting total price of order
         double total = 0.00;
         //Sring for chosing a product to order

         String strProducts;

         int productOrdered;
         //Starting price of unnamed product
         double productPrice = 0.00;
         //boolean used to validate product
         boolean validProduct = false;
         //User input of product number
         strProducts = JOptionPane.showInputDialog(null,"Enter the product number you want to order or done");
         //product number being converted to an integer
         productOrdered = Integer.parseInt(strProducts);
         //string for getting the quanity 
         while(productOrdered > -1)
             {       
         String strQuanity;

         int productQuanity;
         //user input of quanity         
         strQuanity = JOptionPane.showInputDialog(null,"Enter the amount of product " + strProducts);
         //conversion of the quanity to an integer
         productQuanity = Integer.parseInt(strQuanity);
         //validation and totaling of the price of order    

         for(int x = 0; x < NUMBER_OF_PRODUCTS; ++x)

              {

               if(productOrdered == validValues[x])

                  {

                     validProduct = true;

                     productPrice = prices[x];

                     total = productPrice * productQuanity;

                   }                  

             }
             }
         //if there awas a valid out put this message will show
         if (validProduct)

         JOptionPane.showMessageDialog(null, "The price for product " + productOrdered + " is $" + productPrice + ". The price for your ordered item/items so far is $" + total);
         //if output was not valid this message will show
         else

         JOptionPane.showMessageDialog(null,"Sorry1 - invalid product entered");
4

5 に答える 5

1

差し迫った問題が 2 つありますが、どちらが間違っているかを判断するのは困難です...(またはあまり正しくない)...

public static double main(String[] args)

2 つの理由のいずれかで間違っています。これがアプリケーションのメイン エントリ ポイントであると思われる場合は、次のように読む必要があります。

public static void main(String[] args) 

そうしないと、Java はアプリケーションを実行できません。

staticそうでない場合 (実行したいメソッドにすぎない場合)、return存在する前にステートメントが必要です。public static double main(String[] args)その場合、それを呼び出す場所の実装を提供するまで、クラスを実行できる可能性はほとんどありません...

例えば...

public static void main(String[] args) {
    OrderingProducts2.main(args);
}

更新しました

実行中の集計を生成するには、ユーザーが入力できるループから何らかの終了値を提供する必要がありますが、コードでは使用されますが、ループproductOrdered内でその値を変更することはありません。while

productOrderedより良い解決策は、ループに入る前にを検証しproductQuanity、終了値として使用することです。

メインループでは、合計をインクリメントしていませんが、単に値を設定しています...

total = productPrice * productQuanity;

代わりに、次のようなものを使用できます...

total += productPrice * productQuanity;

While はループごとに合計を増やします...

そして最後に、実行可能な例...

// Number of products 
final int NUMBER_OF_PRODUCTS = 5;
//all of the valid values 
int[] validValues = {1, 2, 3, 4, 5};
//prices that coralate with the values
double[] prices = {2.98, 4.50, 9.98, 4.49, 6.87};
//Starting total price of order
double total = 0.00;
//Sring for chosing a product to order

String strProducts;

int productOrdered;
//Starting price of unnamed product
double productPrice = 0.00;
//boolean used to validate product
boolean validProduct = false;
//User input of product number
strProducts = JOptionPane.showInputDialog(null, "Enter the product number you want to order or done");
//product number being converted to an integer
productOrdered = Integer.parseInt(strProducts);

for (int x = 0; x < NUMBER_OF_PRODUCTS; ++x) {
    if (productOrdered == validValues[x]) {
        validProduct = true;
        productPrice = prices[x];
    }
}

if (validProduct) {

    int productQuanity = -1;
    do {

        //string for getting the quanity 
        String strQuanity;

        //user input of quanity         
        strQuanity = JOptionPane.showInputDialog(null, "Enter the amount of product " + strProducts);
        //conversion of the quanity to an integer
        productQuanity = Integer.parseInt(strQuanity);
        //validation and totaling of the price of order    

        if (productQuanity > -1) {
            for (int x = 0; x < NUMBER_OF_PRODUCTS; ++x) {

                if (productOrdered == validValues[x]) {
                    validProduct = true;
                    productPrice = prices[x];
                    total += productPrice * productQuanity;
                }

            }

        }

    } while (productQuanity > -1);

    JOptionPane.showMessageDialog(null, "The price for product " + productOrdered + " is $" + productPrice + ". The price for your ordered item/items so far is $" + total);

} else {
    JOptionPane.showMessageDialog(null, "Sorry1 - invalid product entered");
}
于 2013-11-11T04:34:24.000 に答える
1

main の戻り値の型はなぜdoubleですか?

そのはずpublic static void main(String[] args)

于 2013-11-11T04:21:45.050 に答える
1
public static double main(String[] args)

jls 12.1.4:Invoke Test.mainによると

実行するJava のmain()メソッドは、宣言された public、static、および void である必要があります。宣言された型が String の配列である仮パラメーター (§8.4.1) を指定する必要があります。したがって、次の宣言のいずれかが受け入れられます。

したがって、次のいずれかです。public static void main(String[] args)

また、public static void main(String... args)


繰り返しますが、メソッドを使用していると仮定すると、public static double main()double 型の値を返す必要があります。

これは、jls-8.4.7 メソッド本体で指定されています。

メソッドが戻り値の型を持つように宣言されている場合、メソッドの本体が正常に完了すると、コンパイル時エラーが発生します。つまり、戻り値の型を持つメソッドは、戻り値を提供する return ステートメントを使用してのみ戻る必要があります。「体の端を落とす」ことは許可されていません。


while(productOrdered > -1)
{
  // your code
}

productOrderedあなたが値を持っている可能性がある更新(デクリメントまたはその他の操作)をしているとは思いません-1。注意してください。状態を確認したいことがありますif-else

于 2013-11-11T04:24:42.830 に答える
0

メイン メソッドには次の署名が必要です。そうしないと、Java アプリケーションのエントリ ポイントがありません。

public static void main(String[] args) // return type is void and not double

また、しばらくは必要ありません。無限ループになります。に置き換えますif

if (productOrdered > -1) {
于 2013-11-11T04:20:58.780 に答える
0

あなたの主な方法は

public static void main(String[] args){
 //no return values
}
于 2013-11-11T04:28:33.907 に答える