1-4 変数のスコープの問題

次のコードを確認してください。

class Main{
    static int i;
    
    public static void main(String[] args){
        int i = 10;
        i = set(i);
        i = get();
        println();
    }
    static int set(int i){
        i = i;
        return i++;
    }
    static int get(){
        return i++;
    }
    static void println(){
        System.out.println(i);
    }
}

このコードをコンパイル、および実行すると、どのような結果になりますか。

1つ選択してください。

A.0

B.1

C.10

D.11

E.12

《解説》

変数のスコープについての問題です。

2行目ではstatic変数i、5行目ではmain()メソッド内にローカル変数i、10行目では set()> メソッドの引数に変数iと、同名の変数iが3箇所で宣言されています。

それぞれの有効範囲は、2行目の変数iはクラス全体、5行目の変数iはmain()メソッド 内、10行目の変数はset() メソッド内です。

同じ名前の変数が混在する場合は、最も内側のブロックで定義された変数が優先的に使用されます。

5行目では、main()メソッド内で宣言した変数iに10が代入されます。

6行目では、set()メソッドの呼び出し時に、5行目の変数iを渡します。

処理が10行目に移ると、11行目の i = i;はset()メソッドの引数で宣言した変数iに渡されてきた10を、再び引数の変数iに代入しています。

12行目では変数iの値10を戻り値で呼び出し元に返した後、引数で宣言している変数i をインクリメントします。

6行目に返された10は、5行目で宣言した変数iに再代入されます。

7行目では変数iにget()メソッドの戻り値が代入されます。

14行目のget()メソッドでは、変数iを戻り値として返してから、インクリメントします。

15行目の変数iは、2行目で宣言しているstatic変数iを指しています。

つまり、初期値である0を戻り値として返した後に、static変数iをインクリメントするため、2行目の変数iは、1になります。

8行目では、println()メソッドを呼び出し、18行目で変数iを出力します。

18行目の変数iは、2行目のstatic変数iを指しています。get()メソッドでインクリメントされた、変数iの値である「1」を出力します。

したがって、選択肢Bが正解です。

《答え》B

1-3 ブロックの問題

次のコードを確認してください。

class BlockTest{
    public static void main(String args[]){
        int num = 3;
        if(!(num > 3)){
            System.out.print("abc");
        }
        {
            System.out.print("defg");
        }
        System.out.print("…");
    }
}

このコードをコンパイル、および実行すると、どのような結果になりますか。

1つ選択してください。

A.abc

B.defg…

C.abcdefg

D.abcdefg…

E.コンパイルエラーが発生する

《解説》

ブロックについての問題です。

3行目で宣言した変数numの値が3のため、4行目の!( num > 3) はtrue判定になり、 5行目で「abc」と出力されます。

6行目の}によりifブロックが終了し、7~9行目のブロック内の処理は、if文の判定結果にかかわらず実行されます。

よって、8行目で 「defg」と出力されます。

10行目も引き続き処理されるため「…」と出力されます。したがって、実行結果は「abcdefg…」と出力されるため、選択肢Dが正解です。

《答え》

1-2 変数の宣言の問題

次のコードを確認してください。

class Test{
    public static void main(String args[]){
        func("555");
    }
    public static void func(String str){
        int num2 = 777;
        try{
                String num1 = str;
                num2 = Integer.parseInt(num1);
        }catch(NumberFormatException nfe){
            num2 = 111;
        }
        System.out.println(num1 + ":" + num2);
    }
    static String num1 = "333";
}

このコードをコンパイル、および実行すると、どのような結果になりますか。

1つ選択してください。

A. 555 : 555

B. 333 : 555

C. 333 : 111

D. コンパイルエラーが発生する

《解説》

変数の宣言についての問題です。

3行目では“555"を引数にfunc()メソッド呼び出しを行っています。

6行目で変数num2 の宣言、8行目では変数num1の宣言を行っています。

ただし、変数は宣言したブロックの中({}の中)のみで使用可能であるため、tryブロックの中で宣言された変数num1 の有効範囲は8~9行目に限られます。

9行目では、変数num1に代入されている"555"をInteger.parseInt()メソッドによりint型へ変換し、 変数num2に代入しています。

13行目で、変数num1とnum2の出力が行われていますが、ここで指定している num1はTest クラス全体が有効範囲の15行目の変数であるため、「333」が出力されま す。また変数num2では、9行目でint型に変換した「555」が出力されます。

したがって、選択肢Bが正解です。

《答え》B

1-1 変数のスコープの問題

次のコードを確認してください。

class Scopetest{
    int num;
    public static void main(String[] args){
        Scopetest test = new Scopetest();
        int num = 0;
        System.out.print(num);
        test.foo();
        System.out.print(num);
        System.out.print(test.num);
    }
    void foo(){
        int num = 1;
        bar();
        System.out.print(num);
    }
    void bar(){
        num = 2;
    }
}

このコードをコンパイル、および実行すると、どのような結果になりますか。

1つ選択してください。

A.0100

B.0101

C.0102

D.0112

《解説》

スコープとは変数の有効範囲のことです。ソースコード内の{}で囲まれた部分をブロックと呼びます。

ブロック内で宣言した変数は、宣言したブロック内でのみ使用できます。 ブロック内で宣言した変数をローカル変数と呼びます。

5行目では、変数num を宣言し、0を代入しているため、6行目では「0」と出力されます。

7行目では、foo()メソッドを呼び出しているため、11行目に処理が移ります。

12行目で宣言した変数numはfoo()メソッドの内部でのみ有効なローカル変数です。

そのため、 14行目では「1」と出力されます。

8行目では、再び変数num を出力しています。8行目で使用できる変数numは、5行目の変数numです。よって「0」と出力されます。

9行目では「2」と出力されます。13行目でbar()メソッドを呼び出した際に、17行目に処理が移ると、2行目で宣言しているメンバ変数numに2を代入しているためです。

したがって、実行結果は「0102」と出力されるため、選択肢Cが正解です。

《答え》C

【嘘を見破る心理学】教えます

①見た目でわかる嘘の仕草

喉元に手を当てる、額をこする、鼻をこする、このように嘘をつくと不安や焦りを感じなだめ行動が増加する傾向にある。また、手を後ろに組むポケットに手を入れる、これまで動いていた手の動きを急におとなしくさせたりする習性。そして顔を見てください。瞬きが増える。目を大きく見開く。アイコンタクトの時間が短くなる。笑顔の減少。目が笑っていないぎこちない笑顔。表情の変化・ぎこちなさで嘘を見破りましょう。

 

②コミニュケーションから嘘を見破る

質問する気がないほど喋る。会話の内容をあやふやにして話題をすり替える。不自然な高笑い。コミュニケーションの急激な変化には気をつけて。

 

③口ではYES 本当はNO

私たちは納得していないにも関わらず「はい、わかりました」と相手のいう事を受け入れることがある。本心を偽る回答はトラブルに発展する場合がある。本心からYESと言っているのか見極める力をつけましょう。心からYESと言っているときの仕草は手のひら腕の内側を見せる。顎をさする、食事の時など障害物をよける。本当はNOと感じているときに現れる仕草は握りこぶしを作る、両手を頭の後ろで組む、両手で顎を支える。

【究極おさわりテク】伝授

人間にはパーソナルスペースがあり、近い距離にいると好意を持ちやすい。また、1964年心理学者ブルームが発表した「期待理論」によると人間は努力すれば報酬が得られると期待した時、初めて努力する。つまりボディタッチをして「俺のこと好きなんじゃないか」「頑張れば手に入るかも」と思わせるのです。

 

①ハイタッチ

共同作業を達成した時、同じ趣味が見つかった時、テンションが上がった時に行うおさわりです。色々な状況で行えるため積極的に狙いましょう。

 

②ソフトフェイスタッチ

「肌すごい綺麗だね」「なに言ってんのもう」などで使います。普段触れられることのない顔を最も簡単に触れてしまうテクニック。

 

③メニュー取ってるよ風タッチ

少し遠くにあるメニューを取る時、わざと体にふれる技です。

 

④ちょっとごめんねタッチ

座敷席などでトイレに立つ際、「ちょっとごめんね」と男の肩をさわり立ち上がる技。体重のかけすぎはNG。

 

⑤筋肉タッチ

定番の「筋肉すごーい」。筋肉や腕など様々な箇所をおさわり可能に、その流れで「腕相撲したい」と言って、手を握り合う事ができたらGOOD。

 

⑥手の大きさ比べるよタッチ

「手、私よりすごいでかいですね」、大きさを確認しているという流れで自分の手と相手の手を重ね合わせることができる。手相知識を仕込んでおくのもオススメ。

 

⑦時間教えてタッチ

相手が時計をしている男子ならば時間を見る時「今何時だろ?ちょっと見せて」と男の

腕を握って腕時計を見ましょう。

 

⑧香水タッチ

「香水何使ってるの?いい匂いする」と言いつつ、「私の香水どう?」と言って手首についた香水をかがせるテクニック。

 

UNIQLOタッチ

「え、これユニクロなの?全然見えない」、生地を触るテクニック。もちろん他のブランドでも活用できる。

 

ラコステタッチ

ラコステだ」と言い、ラコステのトレードマークであるワニを触る技。さらにこの技のすごいところはマークが大体男の乳首付近にくる

 

11ギャルソン目潰し

コム・デ・ギャルソンのブランドマークを目潰しするテクニック

【相手の考えを操る】テクニック伝授

①二つの指示を組み合わせると、相手は言う事を聞く

部屋片付けして欲しいなという時、「部屋を片付けなさい」という代わりに「2階へ行って部屋を片付けなさい」と言います。指示を一つだけ出すならどれも断られるかもしれないのに二つの指示を組み合わせた途端どちらの指示も実行してもらえる。一つの指示に対して「嫌です」と断るのは二つの指示を断るよりも簡単。しかし、一度の二つの指示を与えられると相手はどちらの指示を先に断ればいいのかわからなくなる。結局は両方の指示に従ってしまう。この魔法のフレーズは「指示・〜して・指示」。この作戦の素晴らしいところはあなたが相手に影響を与えていることに相手が全く気づかない事。日常の様々な場面で使うことができる。「私の方を見て、何か言って」「ぜひ手にとって、鏡で合わせてみてください」「日報を書いてそれを私にメールしてください」「こっちきて私にキスして」。ちなみにこのような文を確信に満ちた堂々とした態度で言えば言うほど相手はいう事を聞いてくれる。自身を持って相手をまっすぐに見ましょう。

 

②「否定の言葉」を使って操る

「このサイトは絶対に見ないでください。本気で痩せたい人以外は。」こんな広告やサイトがあったら、見たくなりませんか?あなたの考えを提案する時、魔法のフレーズ。「〜をするな、〜したい場合以外は」という否定の形で伝えましょう。「このテレビを買わないでください。画質が一番良いものが欲しいと思っている場合以外は」「このノートを読まないで。本当に優秀な成績を取りたい場合以外は。」このように使うことができる。最初の部分を聞いたときは騙されているんじゃないか?という気分になる。そして好奇心が湧き続きが知りたくなる。後半はあなたが望む結果です。