スタッフブログ

【速攻Program】第9回_バグの修正

投稿日:

皆さん、こんにちは!社員のBです。

昨日はM-1がやっており、見事マジカルラブリーが優勝しましたね。

[マヂカルラブリー(野田クリスタル/村上)]

個人的には[ニューヨーク]か[おいでやすこが]の一本目が面白いと思いましたが、
なかなか面白いと思う人が優勝しないのもM-1ならではですよね。

ただこの人たちみんなここに来るまでの努力が本当にすごいと思いました。
見えないところで努力して、笑いを望まれる場面で笑いを取りに行くのほ並大抵の努力ではできないと思います。

それを考えると錦鯉以外全員優勝でいいような気がしました。

M-1が終わるともうすぐ元旦!皆さんは今年一年を振り返ってどのような一年だったでしょうか?
来年もきれいな心でいい行いを心がけてお笑い芸人のように一歩づつ確実に成長をしていきたいですね。

さて今回は前回書いたコードを修正し、バグっぽい所を直していきましょう。
といっても、今回の修正についてはコード通りにプログラムが動いてそうなので、
バグの時の処理とは違って、間違っている箇所を少し修正すれば治りそうですね。

①因みに現状出ている現象としては、一回目に数値を入力した後に文字を入力すると
直前に打った数値が入力される。

②キャンセルを行うCボタンが変な動作をする。

③文字を二回以上打った場合に二回目以降が-1と表示されてしまうところでしょうか?

とりあえず一個目から直していきましょう。
EventHandleクラスを修正する為、notepadでEventHandleを開いてください
現在の記載ではisFirstフラグがどのような状態にあるかで処理が変わるようになっています。

①、②についてはisFirstフラグがFalseの時の処理がおかしいことがわかりますよね!
そこでif(isFirst == Ture)の制御のelse部分を確認しましょう。

因みにif文の習得の際に少しお話ししましたが、elseはifの条件に一致していなかったときに行われる処理です。
else{
textField.setText(textField.getText() + String.valueOf(i));
}

上記がisFirstの状態がFalse(二回目以降)の時の処理です。
和訳すると
[ テキストフィールドに書いてください(テキストフィールドの文字 と 変数 i(変数 i は入力された数値) を 文字列に変えて)。 ]
こんな感じでしょうか?

そのため二回目にボタンを押した際には前回押された数値がそのまま表示されてしまう様ですね。
ここら辺を分けて記載してあげれば大丈夫っぽいですね。なので以下の様に直してあげましょう。

2回目以降の処理
else{
if(symbol != '?'){
textField.setText(textField.getText() + String.valueOf(symbol));
symbol = '?';
}else{
textField.setText(textField.getText() + String.valueOf(i));
}
}

上記ではif文の中でまたifを使用して条件を分けてあげてます。
これをif文の入れ子と言います。

またsymbol != とifの条件式にいつもの比較演算子とは違うのがありますよね。
if文の比較演算には色々な条件を選ぶことができます。
aよりもbが大きい場合。
aとbが同じだった場合。
aとbが違った場合。
aとbが同じだった場合。かつaとcが違った場合
などに条件を分けることができます。
それを比較演算子と言います。
以下に参考のURLを貼り付けておきますので確認してみてください。
比較演算子と論理演算子(PHP)

修正ができたら一度動作の確認をしましょう。
コンパイルをして実行してあげましょう。

かなりツッコミどころがおおいですが、①の目標は達成できましたね!

次に②!
[ C ]のボタンを押したときにリセットされない点です。
ここら辺は少しだけ最初に実装しておきましたが、ここも直しておきましょう。

コードを確認するとsymbolが C だった場合にはbtnClear_Click()を実行して
その後にreturnをしてますね!
先に returnの説明だけしておきます。
returnここに到達したら処理を返す(中止)する命令です。
これがないとそのまま下の命令までプログラムが走ってしまいます。
それを避ける為、今回この場所にreturnを付けてます。

さて次にbtnClear_Click()の処理の中身を見てみましょう。
void btnClear_Click() {
textField.setText("0");
i = -1;
symbol = '?';
isFirst = true;
}

ん?色々おかしい所はありそうだけど今回のような動作をするところはなさそう!
ってよく見たら、isFirstがtrueでしか動かないようなコードになってますね。

なんでここだけif文の外に出してあげましょう!

// ボタンをクリックした際の処理
btn_Click(e);

if (symbol == ('C')) {
btnClear_Click();
return;
}

if(isFirst==true){
こんな感じですかね?

そしてisFirstがtrueの時のif文はいらないので消しちゃいましょう。
// ボタンをクリックした際の処理
btn_Click(e);

if (symbol == ('C')) {
btnClear_Click();
return;
}

if(isFirst==true){
//もし押されたボタンが「C」だった場合はbtnClear_Click()の処理を行い最初に戻る
if(i == -1){
textField.setText(String.valueOf(symbol));
}

if(i >= 0){
textField.setText(String.valueOf(i));
}
isFirst = false;
}else{
if(symbol != '?'){
textField.setText(textField.getText() + String.valueOf(symbol));
symbol = '?';
}else{
textField.setText(textField.getText() + String.valueOf(i));
}
}
こんな感じかな?

再度コンパイルして実行してあげましょう!
うん!Cが押されたら0に戻るようになりましたね!
これで②も解消されました!

そしていつの間にか③の問題も解決してましたね!
何だがこれだけだと少し物足りないような気がするのでもう少し直していきましょうか?

2回目以降の打鍵の際に記号が二回連続で打ててしまうのは直しておきたいですね!
それでは、そこを修正する為にもう一個フラグを作っといてあげましょう!
11行目くらいにboolean isFirst = true;とあるとおもいますがその下に
boolean symbolFlag = false;と作ってあげましょう!

一度文字が押されたら、このフラグをtrueにしてあげて次の数値が打たれるまで
文字の入力を受け付けないようにしましょう。

二回目以降に処理を行う箇所を修正します。
else{
if(symbol != '?' && i == -1){
if(symbolFlag == true){
return;
}
textField.setText(textField.getText() + String.valueOf(symbol));
symbolFlag = true;
symbol = '?';
}else if(i >= 0){
textField.setText(textField.getText() + String.valueOf(i));
i = -1;
symbolFlag = false;
}else{
return;
}

これでとりあえずは既存の問題は解消できましたね。

ただ見てもらってもわかる通り正直まだまだ電卓として使えるようにするには問題がいっぱいありますね。
そのあたりは次回以降で直していきましょう!

今回は弊社の資格取得制度についてです。

 

「資格取得制度」について

ウインズでは「資格取得制度」をご用意し、IT・エンジニア系の対象資格の取得を目指す方に受験費用負担(※同一資格の場合は初回受験時のみ)、また資格を取得された方には「報奨金」の支給をしています。ご自身のスキルアップに、ぜひご活用ください。
尚、報奨金の支給対象となる条件については以下のとおりとなります。
・当社に入社後、申請手続きを経て受験・取得された方

 

認定機関資格名称報奨金
情報処理推進機構(IPA)プロジェクトマネージャ試験
ITサービスマネージャ試験
ネットワークスペシャリスト試験
データベーススペシャリスト試験
情報処理安全確保支援士試験
応用情報技術者試験
情報セキュリティマネジメント試験
基本情報技術者試験
ITパスポート試験
70,000
70,000
70,000
70,000
70,000
30,000
20,000
15,000
5,000
シスコ技術者認定(Cisco)CCNP(Cisco Certified Network Professional)
CCNA(Cisco Certified Network Associate)
50,000
30,000
NTTコミュニケーションズドットコムマスター・アドバンス(★★)
ドットコムマスター・アドバンス(★)
15,000
10,000
LPI-Japan
LinuC-3 (レベル3)
LinuC-2 (レベル2)
LinuC-1 (レベル1)
50,000
30,000
15,000
Linux Professional Institute(LPI)LPIC-3
LPIC-2
LPIC-1
50,000
30,000
15,000

んーいつも終わりの文句のとこで迷走する。そろそろ決めていきたいところですね。
ではまた次回お会いしましょう。バイビー!

Copyright© 株式会社ウインズ SES・ITアウトソーシング事業 , 2024 All Rights Reserved Powered by AFFINGER5.