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

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

0

数値データの各行の加算について

JAVA初心者です。質問をさせていただきたいのですが。
txtデーターで10列3行の数値データーをつくり下の例のようなデーターを行ごと加算した結果他のtxtファイルに出力させるようなプログラムを作りたいのですが。計算方法などがどのように組めばいいのか教えていただきたいただけませんか?
  
  例)数値txt  計算結果txt
    1 2 3  6
    4 5 6  15
    …    ・・・

今出来ているプログラムだけ転記させてください。入出力プログラムだけですがよろしhくおねがいします。

import java.io.*;
class gyouretu {
//テキストからの入力    
        public static void main(String[] args) {
            try {
                FileReader in = new FileReader("data.dat");
                BufferedReader br = new BufferedReader(in);
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
            }
                br.close();
                in.close();
            } catch (IOException e) {
                System.out.println(e);
            }
        }

/************************************/
/*ここに計算プログラムをいれたいです            */
/*                                  */
/************************************/
//出力
           public gyouretu() {
               try {
                   FileWriter in = new FileWriter("result.dat");
                   BufferedWriter br = new BufferedWriter(in);
                   br.close();
                   in.close();
               } catch (IOException e) {
                   System.out.println(e);
               }
   }
}

8

回答

78757

閲覧

8件の回答

評価

0

まず、closeはfinally節で行いましょう。

ポイントは、

・lineをどうやって数字にするか
・lineをどうやってためこんでいくか

というところだと思います。
考えてみてください。

評価

0

答えていただきありがとうございます。
>・lineをどうやって数字にするか
>・lineをどうやってためこんでいくか
JAVAはじめてまもなくてまだ理解に乏しいためご迷惑でなければプログラムを書いていただければ光栄です・・・自分でも書きながらやっていますが思ったようにプログラム文にならないため少し苦しんでいます。

また出力された数字を a1+b1+c1 見たいに文字にしてけいさんするのですか?

評価

0

極力、そのものは回答しないスタンスです。
それでは力になりませんから。

それぞれについて、検索なりして調べてください。
「調べてはいる」と言われても、実際何が分かってどんなことをやってみてだめだったか…というところが見えないと、読み手は「何もしてないんじゃないの?」と思ってしまいます。

評価

0

>思ったようにプログラム文にならない

と言われていますが、思い通りにならなくとも書いてみたコードとかないんですか?
プログラムの組み立て方とか以前、まだどういったものを利用すればいいかとか以前に、まだどう扱っていけばよいかが判っていないようですね
そこがmioさんが答えられ、プログラムを書いてくれといっている部分そのものです

そこはコードを示されても解ったつもりで終わってしまうことが殆どでしょう・・力にならない
まずはそこを考え、うまく行かなかったにしてもコードを書いてみることです

>JAVAはじめてまもなくてまだ理解に乏しいためご迷惑でなければ

と言うのなら、そうならないように理解を深めること

>少し

と言えるくらいならまだまだ足りないでしょう
コンピュータを扱うこと,プログラムを組むことは簡単なことではないですよ

評価

0

いわれてプログラムをエクリプスで作ってみたのですがエラーが数箇所出てしまい分からないため指摘していただけたらと思いまたかきこませていただきました。
お手数ですがエラーの原因また解決の仕方を教えていただければ光栄です。
エラーの位置は
63行目の                 System.out.print("\t" + m4[i][j][k]); の";"部分
73行目の
m4[i][j][k] = m1[i][j][k] + m2[i][j][k] + m3[i][j][k]; の"m1[i][j][k] + m2[i][j][k]"です



import java.io.*;
class gyouretu {
//テキストからの入力    
        public static void main(String[] args) {
            try {
                FileReader in = new FileReader("data.dat");
                BufferedReader br = new BufferedReader(in);
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
            }
            } catch (IOException e) {
                System.out.println(e);
            }
        }

//計算
        public void keisan(){

            double m1[][][][][][][][][][]= new double [2][2][2][2][2][2][2][2][2][2];    // 行列m1
            double m2[][][][][][][][][][]= new double [2][2][2][2][2][2][2][2][2][2];    // 行列m2
            double m3[][][][][][][][][][]= new double [2][2][2][2][2][2][2][2][2][2];    // 行列m3
            double m4[][][][][][][][][][]= new double [2][2][2][2][2][2][2][2][2][2]; // 行列m4
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

            /* 行列m1の入力 */
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    for (int k = 0; k < 2; k++) {
                }
                System.out.print("m1[" + i + "][" + j + "][" + k + "]=");
                m1[i][j][k] = (new Double(in.readLine())).doubleValue();
                }
            }

            /* 行列m2の入力 */
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    for (int k = 0; k < 2; k++) {
                System.out.print("m2[" + i + "][" + j + "][" + k + "]=");
                m2[i][j][k]= (new Double(in.readLine())).doubleValue();
                }
            }
            /* 行列m3の入力 */
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    for(int k = 0; k < 2; k++) {
                }
                System.out.print("m3[" + i + "][" + j + "][" + k + "]=");
                m3[i][j][k] = (new Double(in.readLine())).doubleValue();
                }
            }

            /* 行列の和の計算呼び出し m4 = m1 + m2 +m3*/
            sumOfMatrix(m1, m2, m3, m4);

            /* 行列の和の表示 */
            System.out.println("m1 + m2 + m3 =");
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 2; j++) {
                    for (int k = 0; k < 2; k++) {
                }
                System.out.print("\t" + m4[i][j][k]);
                }
                /* 2次正方行列の和の計算 */
                static void sumOfMatrix
                (double [][][][][][][][][][] m1, double [][][][][][][][][][] m2, 
                        double [][][][][][][][][][] m3, double [][][][][][][][][][] m4) {

                for (int i = 0; i <2; i++) {
                    for (int j = 0; j < 2; j++) {
                        for(int k = 0; k < 2; k++ ){
                    m4[i][j][k] = m1[i][j][k] + m2[i][j][k] + m3[i][j][k] ;
                    }
                }

                }
            }
    
//出力        
           public gyouretu() {
               try {
                   FileWriter in = new FileWriter("result.dat");
                   BufferedWriter br = new BufferedWriter(in);
                   br.close();
                   in.close();
               } catch (IOException e) {
                   System.out.println(e);
               }
   }

}

評価

0

こんにちわ。
エラーメッセージは全文を載せていただけると確定しやすいです。
とりあえず、{}の数が違うように見えます。

あと、参考までに。
同じ事を行う処理はひとつにまとめることができます。
また、配列多重化は今回の処理に必要ないですので別形式に置き換えることで簡潔になります。

keisanメソッドやgyouretuを呼ぶ箇所もまだmainに入れていないようですし、
そもそも読み込んだ文字列をkeisanに渡すにはどうするんだとか取り込むデータ形式は「,」区切りなのか「タブ」区切りなのかとかいろいろ突っ込みどころはあるのですが、
まず、フローチャートを(図でなくとも箇条書きででも)記述することをお勧めします。
余裕があればデータフローダイアグラムも。

慣れると頭の中だけで出来るようになりますが、こんがらがったときはフローを書くと
きちんと整理できるのでお勧めです。
あ。パソコン上のツールを利用するより手書きで行ったほうが理解しやすいですよ。

評価

0

>エラーが数箇所出てしまい分からない
エラーメッセージも検索です。
初心者のうちに出てくるエラーメッセージは、ほとんど検索で同じものに行き当たり、解決策も見出せます。
「分からない→質問」という流れを断ち切って、「自力で調べて試す」というステップを入れないと、力はつきません。

どうも「配列」をどう使うのかも、理解できていないようです。
今回の場合、(私がそちらの意図を読み違えていなければ)配列は多くて二次元で足りそうです。
まずは数字が1つのもの(テキストもプログラムも)で作って、それから1行に2つの数字があるもの、次に…と、
だんだんとバージョンアップしていくといいかもしれません。
数字が1つのもの、2つのものでそれぞれ動くものができたとき、そこにどういう違いが出てきたか、その違いは何を意味するか、とか。
基本的なロジックを何度でも試行錯誤して、しっかり押さえておかないと、大きなものは作れませんから。

評価

0

{}の位置(というか{}内に行が綺麗にはいっていない)と[]の数がおかしいですね。

>73行目の
>m4[i][j][k] = m1[i][j][k] + m2[i][j][k] + m3[i][j][k]; の"m1[i][j][k] + m2[i][j][k]"です

のとこなんて明らかに配列の数がおかしいですし・・・。

まあ、mioさんもおっしゃってますが、こんなものすごい配列を書く必要はなさそうな気がします。
([][][]って文字化けかと思いましたよw)

まずはご自身のやりたいことを箇条書きにして、一つずつ作っていくことをお勧めしますよ。

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