Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Java電卓作成のプログラム

Javaで電卓の作り方を教えて

20

回答

87404

閲覧

20件の回答

評価

0

http://www.google.com/search?q=java+%E9%9B%BB%E5%8D%93

評価

0

プログラム例を作ってください

評価

0

なぜあなたのために作らなきゃいけないんですか?

評価

0

>プログラム例を作ってください
1日あたり5万円の対価を払っていただければw

評価

0

すわ、久々に基本的な質問か!と思いきや
単刀直入な素敵な要望ですね(笑)

個人的にはこれさんの返答好きですね、はい(笑)

>yuuさん
もう見ていないと思いますが、「ここまでやったけどここがわからない」、「うまい解決策が思いつかない」などの質問であれば
皆さん快く回答してくださると思いますよ。

評価

0

ここまで作ったんですが、どうも計算ができないのでどこがまずいのか教えてください


import java.awt.*;
import java.awt.event.*;

public class frame05 extends Frame implements ActionListener{
    Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,b11,b12,b13,b14,b15;
    TextField tf;
    long lnum;
    char c=0;
    public static void main(String[] args){
        frame05 f=new frame05();
        f.setVisible(true);
    }
    public frame05(){
        setLayout(new FlowLayout());
        //p.setLayout(new GridLayout(4,3));
        setBounds(200,300,400,500);
        tf=new TextField(11);
        b1=new Button("1");    
        b2=new Button("2");
        b3=new Button("3");
        b4=new Button("4");
        b5=new Button("5");    
        b6=new Button("6");
        b7=new Button("7");
        b8=new Button("8");
        b9=new Button("9");
        b0=new Button("0");
        b11=new Button("+");
        b12=new Button("-");
        b13=new Button("*");
        b14=new Button("/");
        b15=new Button("=");
        Panel p=new Panel();
        add(p);
        add(tf);
        p.add(b1);
        p.add(b2);
        p.add(b3);
        p.add(b4);
        p.add(b5);
        p.add(b6);
        p.add(b7);
        p.add(b8);
        p.add(b9);
        p.add(b0);
        p.add(b11);
        p.add(b12);
        p.add(b13);
        p.add(b14);
        p.add(b15);
    //    Panel p = new Panel( );
        addWindowListener(
        new WindowAdapter(){
            public void windowClosing(WindowEvent eWinEvent){
                System.exit(0);
            }
        }
        );
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        b6.addActionListener(this);
        b7.addActionListener(this);
        b8.addActionListener(this);
        b9.addActionListener(this);
        b0.addActionListener(this);
        b11.addActionListener(this);
        b12.addActionListener(this);
        b13.addActionListener(this);
        b14.addActionListener(this);
        b15.addActionListener(this);

    }
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==b1){
            tf.setText(tf.getText()+"1");
        }
        if(e.getSource()==b2){
            tf.setText(tf.getText()+"2");
        }
        if(e.getSource()==b3){
            tf.setText(tf.getText()+"3");
        }
        if(e.getSource()==b4){
            tf.setText(tf.getText()+"4");
        }
        if(e.getSource()==b5){
            tf.setText(tf.getText()+"5");
        }
        if(e.getSource()==b6){
            tf.setText(tf.getText()+"6");
        }
        if(e.getSource()==b7){
            tf.setText(tf.getText()+"7");
        }
        if(e.getSource()==b8){
            tf.setText(tf.getText()+"8");
        }
        if(e.getSource()==b9){
            tf.setText(tf.getText()+"9");
        }
        if(e.getSource()==b0){
            tf.setText(tf.getText()+"0");
        }
        if(e.getSource()==b11){
            tf.setText(tf.getText()+"+");
        }
        if(e.getSource()==b12){
            tf.setText(tf.getText()+"-");
        }
        if(e.getSource()==b13){
            tf.setText(tf.getText()+"*");
        }
        if(e.getSource()==b14){
            tf.setText(tf.getText()+"/");
        }
        if(e.getSource()==b15){
            tf.setText(tf.getText()+"=");
        }
        if(e.getSource()==b11){
        lnum=Long.parseLong(tf.getText());
        c='+';
        }

        if(e.getSource()==b12){
            lnum=Long.parseLong(tf.getText());
            c='-';
        }
        if(e.getSource()==b13){
            lnum=Long.parseLong(tf.getText());
            c='*';
        }
        if(e.getSource()==b14){
            lnum=Long.parseLong(tf.getText());
            c='/';
        }
        if(e.getSource()==b15){
            lnum=Long.parseLong(tf.getText());
            c='=';
        }
        
        
        if(e.getSource()==b11){
            if(c=='+'){
            lnum+=Long.parseLong(tf.getText());
            }
            if(c=='-'){
            lnum-=Long.parseLong(tf.getText());
            }
            if(c=='*'){
            lnum*=Long.parseLong(tf.getText());
            }
            if(c=='/'){
            lnum/=Long.parseLong(tf.getText());
            }
            tf.setText(""+lnum);
            c=1;
            }
        }
}

評価

0

こんにちわ。
自力でがんばっているみたいですね。

作った、というかSwingで入れ物は作った。
という感じですね。

ソースを実行するまでも無く、見ただけで計算が出来ないことは明白。
ただ、単純に問題点をあげつらっても恐らく
「動きません」→「問題点を列記」→「直しました。今度は〜動きません」になりそうなので、
少し厳しく行きますよ?


問題点
 ・ボタン押下時にTextFieldに固定のTextを追加している。
 ・特殊な演算が考慮されていない
 ・押し間違いに対する考慮がない
 ・小数点に関する考慮がない
 ・可読性が低い

結構致命的なのもありますね。
そこで問いたいのですが、
「電卓の使用手順を知っていますか?」
知っているならば「手順を箇条書きにしてみましたか?」
知らないならば電卓を見ながら「1+1=」を行ってみましょう。

手順を箇条書きにしたならば「ソースと箇条書きを指差しながら見比べてみましょう」
手順を箇条書きにしていないならば「手順を箇条書きにしましょう」


計算が出来ないことは上記をやってみれば自ずと解決できると思います。

 ・特殊な演算が考慮されていない
 ・可読性が低い

については暗黙のルールみたいなものもあるのでサクっと解説しましょうか。
「特殊な演算」
 ・Javaは0除算をExceptionで解決します。
  
「可読性が低い」
 ・変数名は見ただけで何に使用する変数かわかる様にします。
  例:×b11、→○calc_plus
 ・同じ処理はメソッド化します。
 ・処理ブロック({}括り)毎に適宜コメントを入れます。
 ・メソッドの先頭にコメントを入れます。


とりあえず、こんなものでしょうか。
極論ですが、プログラムは「やりたいこと」を「手順に分割する」事です。
わからなくなったらここに立ち返ってみることが大事である、と私は思います。

評価

0

http://jubilo.cis.ibaraki.ac.jp/~isemba/PROGRAM/JAVA/java.shtml

評価

0

しまった、すったかさんがわたしのように投げやりでなく、ソース問題点以外にコーディング問題点までかなりやさしく教えてる・・・

評価

0

>とおりすがりさん

 やさしいでしょうか?
 結構大雑把に書いてるはずなんですけれども。
 yuuさんは宿題か課題なのでしょう。
 プログラムも始めたばかりなのかな、という印象があったので前述の通り書いたのですが。

 参考urlを拝見しました。
 そのままずばりのソースが載っていましたねー。
 Sampleには丁度良いソースがいくつか合ったので私も参考になりました。
 
 

評価

0

>やさしいでしょうか?
ここまで丁寧にソースのレビューをしてあげたら
やさしいですね(笑

>yuuさんは宿題か課題なのでしょう。
わたしもそう解釈しましたが、学習することより早く終わらせたいという意識が強く感じられたので、参考サイトを載せただけで終わってしまいました。

学習の意味では、【ずばりなソース】が載っているのサイトですので、教えるのはよくないかなとも思ったのですが・・・

>Sampleには丁度良いソースがいくつか合ったので私も参考になりました。

参考になってもらえれば幸いです(わたしが作ったサイトではありませんが(笑

評価

0

なんというか・・
なんだろうなあというレスもあったりしますが、
宿題とかだったとして、それが求めているものは「Java電卓作成のプログラム」が作れるかとかではなくて、プログラムを作るとはどういうことなのかだったりすると思うのですよ。
題材としてはかなり高度過ぎるようなものだなあと思ったりもしますが。

ストレートなソースコードを出すかどうかもまあ・・要は当人がそれをどう活用できるかどうかであって、友達のノートを移させてもらう感覚だったら、先は自ずと見えているようなもんで。

結構、すったかさんも細かく書かれてはいるけど、ホントに書こうと思えば大変なことで、1回で全てに近いようなことを書かれようとか結構手を掛けられたのだと思いますけど。

・・と思って、まだ早いと感じたところを挙げてみようかと思いましたけど、再度読み直してみたら、かなり多い?

まず、電卓プログラムとして最低限動く、そのためにはどう作ればいいのか・・現物の電卓を観察し、そこからロジックを組み立てる・・ということが一番重要なことなので、
> ・特殊な演算が考慮されていない
> ・押し間違いに対する考慮がない
> ・小数点に関する考慮がない
まず最低限動いた後で、更に突き詰めるなら考えていったのでもよいのではないか。
> ・Javaは0除算をExceptionで解決します。
とか、後で考えても遅くはないですよね?

> ・可読性が低い
経験を積んできた人には容易に思えることでも、数をこなして経験を積んで行かないと、まず掴み所さえ見えて来ないんじゃないでしょうか。
まず、動くもの、シッカリしたロジックが考えられるようになる。
そして、更にソースコードとして高めて行くなら可読性とかも考えて行く。
可読性とロジックは絡み合いそうに思えたりするかも知れないけど、やっぱりロジックとは別物だと思いますよ。

まず、yuuさんに求められるものは、ロジックとはどういうものか、プログラムを作るには何が必要かを理解てできるかということなんじゃないでしょうか。

評価

0

まあさん、こんにちわ。
呼びかけられたみたいなので、返事します(笑)

>まず、電卓プログラムとして最低限動く、そのためにはどう作ればいいのか・・現物の電卓を観察し、そこからロジックを組み立てる・・ということが一番重要なことなので、
>> ・特殊な演算が考慮されていない
>> ・押し間違いに対する考慮がない
>> ・小数点に関する考慮がない
>まず最低限動いた後で、更に突き詰めるなら考えていったのでもよいのではないか。
>> ・Javaは0除算をExceptionで解決します。
>とか、後で考えても遅くはないですよね?

現物の電卓を観察すると、ACと.はちゃんと存在していますよね。
きちんと電卓を見直しましょう、という意味をこめて書きましたが……この調子だと誰にも伝わっていないようですね(苦笑)

ただ
>> ・Javaは0除算をExceptionで解決します。
に限れば、後々でもかまわないでしょうね。
おそらく知らないのではないか、という老婆心で付けときました(笑)
余計だったかな?


>可読性とロジックは絡み合いそうに思えたりするかも知れないけど、やっぱりロジックとは別物だと思いますよ。

私は違うと思います。
コメントを追加することでももう一度ロジックを見直し、間違っていないか確認できるはずです。
また、わかりやすい変数名を付けることは使用変数を間違う頻度を下げる事にもつながります。
事実、yuuさんのソースでも怪しいところありますし。
経験が無いからこそ、自分でメモをソースに残さなければならないのではないでしょうか?

……偉そうな事言っていますが、自分も学生時代は「コメントなんて」思ってましたし、入れてませんでした。
社会に出て、javaを学んで使っていくうちに可読性の高さが品質にもつながることを学びました。
また、コメントを書かない癖はなかなか直らないモノです。
今のうちに身に着けていただこうかと思った次第。


>まず、yuuさんに求められるものは、ロジックとはどういうものか、プログラムを作るには何が必要かを理解てできるかということなんじゃないでしょうか。

そうですね、私もそう思います。
別の回答でも『アルゴリズム』が大事であるとそう回答しましたし。
なので
>手順を箇条書きにしたならば「ソースと箇条書きを指差しながら見比べてみましょう」
>手順を箇条書きにしていないならば「手順を箇条書きにしましょう」

と、説明してあります。
これをどう読み解いたかは、yuuさんしだいでしょうけれど。

Web上のやりとりは思いが伝え辛くて難あり、ですね。

評価

0

コメント主体でしたか。
変数名とかは、できればやるといいけど、まだロジック作りの何たるかを知り始めるときだし、そんな重要と言えるほどでもないかなと。

> ・同じ処理はメソッド化します。
とまで出てきているところで、それは慣れないうちからやってると、ロジックというものを知る以前に混乱してしまうだろうと思ったのですけどね。
まず、ある程度動くものになって、どういうロジックであるかをシッカリ理解できた上で、リファクタリングのステップとして進んだ方がいいかと。
メソッド化だけでなく、b1〜b15を配列化するとか、定数,Enum(1.5)とかを取り入れたりするとか、更に工夫して行くことができると思うけど、それはシッカリしたロジックができた上で、頭の中にあるロジックを壊さないようにジックリ見ていくのがよいものではないかと。

評価

0

なんていうか・・

やっと、コードを並べられたみたいな感じに見えますけど、一度に書いてしまおうと思ったりしたのだろうと思いますけど、なんか、あまりに多くのことを一気に求めすぎ・・みたいな感もあって。
もっと優先度を明確にしてやるとか、あるかもですけどね。

余談みたいなものですけど
>現物の電卓を観察すると、ACと.はちゃんと存在していますよね。
最初に「電卓を作ってみよう」と思ったら、どういうものを作ろうと思うか。
0〜9で数字が押せて、足し算くらいできるもの。
うまく行ったら、四則演算くらいはとか。
やってるうちに・・ACというより・・クリア(C)がないと不便だとか気付き、
それがUIとかを意識し始める元になるのかどうかは判らないけど・・
やがて、電卓らしくなってくると、普通に見る電卓の機能は全て入れてみようかとか、更に関数電卓のように・・
とか進んで行く"かも?"しないところで、
"AC"とか"."とか、なんか欲張りすぎで・・まだマトモなプログラムとは言えない感じなんだし、まだまだ先でいいよなあと思ったりしますけどね。

評価

0

数年前のレスに失礼しますが、本人のお礼も返答もないとはこれいかに…。
いろいろ参考になりました。

評価

0

>本人のお礼も返答もないとはこれいかに…。

評価

0

いきなりGUIやるからでしょ。
CUIからコツコツ頑張る人は基本が身につく。

評価

0

2ch宿題スレ系でしょ。

評価

0

DQNのあつまりだなw
みてるこっちが気分わるくなる

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。