0

少し問題があります。これが状況です。特定のボタンがクリックされるとインクリメントされるメイン クラスに金額フィールドがあります。注文を削除できる方法が提供されており(私は基本的にレストラン端末用にプログラミングしています)、金額が減ります。delete メソッドは別のクラスに配置されます。

public void posdel(int pos, JTextField amountFieldGot, int amountGot)
{
    if(slist==null)
    {
        JOptionPane.showMessageDialog(null, "No order has been placed yet.",null,JOptionPane.WARNING_MESSAGE);
    }
    else
    {
        if(pos==1)
        {
            reductionAmount = (slist.quantity*slist.price);
            amountGot = amountGot - reductionAmount;
            slist=slist.next;
        }
        else
        {
            int i=1;
            Node temp=slist;
            Node prev=null;
            while(temp.next!=null && i<pos)
            {
                prev=temp;
                temp=temp.next;
                i++;
            }
            if(pos==i)
            {
                prev.next=temp.next;
            }
            else
            {
                JOptionPane.showMessageDialog(null, "Invalid order", null, JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    amountFieldGot.setText(Integer.toString(amountGot));
}

つまり、基本的に、GUI に amountField があり、それをパラメーターとして posdel メソッドに渡します。また、金額の値をパラメーターとして渡します。私が得る新しい金額は、最初の注文を削除した後の amountGot です。(他のポジションのコードは書いていません。) メソッドに渡す金額の値が 30 (14+16) 14 = 注文 1、16 = 注文 2 であるとします。最初の注文の値は 14 です。つまり、amountGot = 30 - 14、つまり 16 です。GUI の amountField は 16 に更新されます。注文 2 が注文 1 になります。これを削除しようとすると、amountField 14 に更新されます (30-16 = 14)。したがって、金額の値は 30 のままで、新しい amountGot の値に更新されないと推測しています。誰かがこの問題を解決するのを手伝ってくれますか?

以下は私の削除ボタンのコードです。

deleteButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                dishDelPos = JOptionPane.showInputDialog("Enter the position of the order to be deleted");
                try
                {
                    dishDeletePosition = Integer.parseInt(dishDelPos);
                    order1.posdel(dishDeletePosition, amountField, amount);
                    repaint();
                }
                catch(NumberFormatException ex1)
                {
                    JOptionPane.showMessageDialog(null,"This is not a valid position");
                }
            }
        });
4

1 に答える 1

1

いくつかのこと。

クラスの削除メソッドを静的にすることができます。あなたはそれを参照します

 value = MyClass.deleteMethod();

メソッドを実行する新しいクラスを作成できます

MyClass myClass = new MyClass();
value = myClass.deleteMethod();

delete メソッドを保持しているクラスの既存のインスタンスへの参照を、呼び出したい場所に渡すことにより、ある種のポインターを使用してそれを行うことができます。

 myFunction(MyClass myClass)
 {
    value = myClass.deleteMethod();
 }

基本的に値を返すように関数を設定します

public static int deleteMethod()
{
}

この関数は int を返します。

または、それ以上を返す必要がある場合は、情報のグローバル変数を使用してクラスを設定します

class MyClass
{
   public int value1;
   public int value2;
   public String value3;

   public void deleteMethod()
   {
       //does something with global variables
   }
}

そのように削除を呼び出した後、情報を取得するようになりました

Myclass myClass = new MyClass();
myClass.deleteMethod();
value1 = myClass.value1
value2 = myClass.Value2
value3 = myClass.Value3
于 2012-12-01T06:54:35.540 に答える