2

これは私がこれまでに行ったプログラムです。私はレジ係に価格を入力し、ペットの場合はyまたはnを入力するように依頼することになっています。次に、5つ以上のアイテムがある場合、メソッドは割引を計算することになっています。私が持っているプログラムは、割引方法の返品データを除いて機能しています。

エラーは68です:error; cannot return a value from method whose result type is void.

なぜデータが無効なのか混乱しています。ステートメントを取り出すとreturn discount;、プログラムはエラーなしでコンパイルされます。

import javax.swing.JOptionPane;

public class Assignment4
{
    public static void main (String[] args) 
    {
        double[] prices = new double[1000];
        boolean[] isPet = new boolean[1000];
        double enterPrice = 0;
        int i = 0;
        String yesPet = "Y";
        int nItems = 0;
        do
        {
            String input = JOptionPane.showInputDialog("Enter the price for the item: ");
            enterPrice = Integer.parseInt (input);

            prices[i] = enterPrice;

            String petOrNo = JOptionPane.showInputDialog("Is this item a pet? Enter Y for pet and N for not pet.");

            if (petOrNo.equalsIgnoreCase(yesPet))
            {
                isPet[i] = true;
            }
            else
            {
                isPet[i] = false;
            }
            i = i+1;
            nItems = nItems + 1;
        } while (enterPrice != -1);
        //System.out.println(nItems);
    }

    public static void discount(double[] prices, boolean[] isPet, int nItems)
    {
        boolean found = false;
        double[] discount = new double[nItems];

        if (nItems > 6)
        {
            for (int i = 0; i < nItems; i++)
            {
                if (isPet[i] = true)
                {
                    found = true;
                    break;
                }
            }

            if (found = true)
            {
                for (int x = 0; x < nItems; x++)
                {
                    if (isPet[x] = false)
                    {
                        int n = 0;
                        prices[x] = discount[n];
                        n = n + 1;
                    }
                }
            }
        }
        return discount;
    }
}
4

3 に答える 3

2

メソッドは配列discountを返す必要があります。double変化する

public static void discount(double[] prices, boolean[] isPet, int nItems) {

public static double[] discount(double[] prices, boolean[] isPet, int nItems) {

discount配列内のどのエントリにも値が割り当てられていないため、すべての値はになります0.0

于 2012-11-04T01:10:44.420 に答える
1
public static void discount(double[] prices, boolean[] isPet, int nItems)

次のように置き換える必要があります:

public static double[] discount(double[] prices, boolean[] isPet, int nItems)

ちなみに、discountいっぱいになることはなく、空の配列を返します。

于 2012-11-04T01:13:59.070 に答える
0

メソッドの署名は、ユーザーと Java の間のコンパイル時の約束です。指定した型を返すことを約束します。voidメソッド シグネチャ内の は、何も返さないことを意味しますが、何かを返します。それは約束に違反しているため、エラーになります。

double[]コンパイラへの約束を果たすために単に戻るようにメソッドの署名を変更する必要があります。

また、discount実際に埋められることはありません...代入は右から左への結合です。そのため、ステートメントprices[x] = discount[n]は期待どおりに動作しない場合があります。

于 2012-11-04T01:19:21.220 に答える