

`if` の条件として、その前にあるメソッドが実行されていたら `if`
の中に書いてあることを実行する、というようなプログラムが作りたいです。具体的には以下のようなコードがあったときです。

お願いします。

[code]

    import java.util.Scanner;
    
    public class Main
    {
        public static void q()
        {
            System.out.println("You typed 1");
        }
    
        public static void r()
        {
            System.out.println("You typed 2");
        }
    
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            System.out.println ("Type one or two:");
                    int a = in.nextInt();
    
            if (a == 1)
            {
                q();
            }
            else
            {
                r();
            }
    
            // ここでもし q() が実行されていたらというようなif文を書きたい
        }
    }
    
[/code]


CC BY-SA 4.0
2020-03-07T00:43:05.857
63636
2020-03-07T05:15:43.500
2020-03-07T05:15:43.500
3060
36217
question
java
直前にメソッドが実行されたかを if 文の条件として判定するには？


Javaには(他の大多数のメジャーな言語にも)特定のメソッドが以前に実行されたかどうかを簡単に判定するような機能は用意されていません。

したがって、全てを自前で管理してやらないといけません。

[code]

    import java.util.Scanner;
    
    public class Main {
        /** q()が実行されていたらを管理する変数 */
        private static boolean isQExecuted = false;
    
        public static void q() {
            System.out.println("You typed 1");
            isQExecuted = true; //<- 自前で管理する
        }
    
        public static void r() {
            System.out.println("You typed 2");
        }
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.println ("Type one or two:");
            int a = in.nextInt();
    
            isQExecuted = false;
            if( a == 1 ) {
                q();
            } else {
                r();
            }
    
            //ここでもしq()が実行されていたらというようなif文を書きたい
            if( isQExecuted ) {
                //q()が実行されていたらの場合の処理
                //...
            } else {
                //実行されていない場合の処理
                //...
            }
        }
    }
    
[/code]

* * *

ただし、なぜそのような判定を行いたいと思われたのかが気になります。本当に判定したいことは何だったのでしょうか?

[「XY
問題」とは何ですか？](https://ja.meta.stackoverflow.com/q/2701/13972)のスレッドをよく読まれて、自分が「XY
問題」にはまってしまっていないか、再考してみてください。実際の問題によっては、遥かに素晴らしい解決方法があるかもしれません。


CC BY-SA 4.0
2020-03-07T01:09:30.353
63639
2020-03-07T01:09:30.353
13972
63636
answer


簡単にはこれでいいのではないですか？

[code]

    boolean exec = false;   
    if (a == 1)
    {
       q();
       exec = true;
    }
    else
    {
        r();
    }
    if (exec == true)
    {
       xxxx
    }
    
[/code]


CC BY-SA 4.0
2020-03-07T01:39:30.703
63640
2020-03-07T01:39:30.703
24490
63636
answer