このブログを検索

2019年6月22日土曜日

やさしいjava 6版 P462のサンプルプログラム

やさしいjava 6版
 P462のサンプルプログラムを、
 好きな文章を入力し、テキストファイルに出力するものに変えてみよう。
 また、今回も
「Java入門教室」
 に記載してあった ”汎用性のあるメソッド”を使用しました。
 

🌟P462ページサンプルプログラムを 変更

//ファイルに出力するプログラムを作ろう。
//何行 入力しますか
//文字を入力させて
//その文字をファイルに出力

import java.io.*;

class SampleP462_2
{
    static int line_count;    //クラス変数 行数
    static String output_sentence; //クラス変数 出力時 出力文書
    
    public static void main(String[] args)
    {
        System.out.println("テキストに文字を出力させます。" + "\n");
        line_count = line(); // line_count クラス変数 行数の入力メソッドに移動
        System.out.println("\n" + line_count + "行の文章を作成します。" + "\n");
        output_sentence = sentence(); // output_sentence クラス変数 行の文字入力のメソッドに移動
        output();    //テキスト出力メソッドに移動
    }
    public static int line() //行数の入力 → input にて入力作業 → クラス変数に返す
    {
        String str = input("何行の文章を入力しますか?"); //変数 str はこのメソッドのみ有効
        int n;                                     //変数 n はこのメソッドのみ有効
        try{
            n = Integer.parseInt(str);
        }
        catch(Exception e){
            System.out.println("数値以外が入力されました。1行のみ出力します。");
            n = 1;
        }
        return n;
    }
    public static String sentence() //行の文字の入力 → inputにて入力作業 → クラス変数に返す
    {
        String[] str = new String[line_count];  //文字の入力
        String str_g = "";                      //変数 str_g はこのメソッドのみ有効
        
        for(int i=0; i<str.length; i++){
            str[i] = input( (i+1) + "行目の入力です。"); // inputメソッド にて入力作業
        }
        
        for(int i=0; i<str.length; i++){  //文字の統合
            str_g += str[i] + "\n";
        }
        return str_g;
    }
    public static void output()  //テキストに出力メソッド
    {
        try{
            PrintWriter pw = new PrintWriter
            (new BufferedWriter(new FileWriter("sakubunn.txt")));
            
            pw.println(output_sentence);
            System.out.println("ファイルに書き込みました。");
            
            pw.close();
        }
        catch(IOException e){
            System.out.println(e);
        }
    }
    public static String input(String txt)  //入力メソッド(汎用) Stringで返す。
    {
        System.out.println(txt);     //txt(コメント)を表示
        BufferedReader br =                        //入力処理
         new BufferedReader(new InputStreamReader(System.in));
        String str = null;               //変数 str はこのメソッドのみ有効
        try{
            str = br.readLine();
        }
        catch(IOException e){
            System.out.println(e);
        }
        return str;
    }

}

このプログラムは、初めに何行の文章を入力するのか、
予め入力するという 非常に使い勝手が悪いもの。
それを改良したものを作るのだ。

今日の教訓
 改良したものを作るぞー!

2019年6月10日月曜日

やさしいjava 6版 Lesson4 練習問題 5 "メソッド作成"、"テキストに出力"

やさしいjava 6版
「Lesson4」 練習問題 5を

「Java入門教室」
 に記載してあった ”汎用性のあるメソッド”を使った物を使って
 作ってみよう。
 
 また、txtに 出力させてみよう。

 元々の問題は 科目1~5 の点数を入力して、5科目の合計点と 平均点を表示するもの。


🌟練習問題 4-5

import java.io.*;

class SampleP5_4
{
    static int[] test = new int[5];  //フィールド クラス変数 各点数入力用
    static String[] curriculum = {"国語", "算数", "理科", "社会", "外国語"}; //クラス変数 教科名
    static String comm1 = "の点数は?";  //クラス変数 教科名 + "の点数は?"
    static int sum = 0;              //クラス変数 合計点
    static int max = 0;              //クラス変数 最高点
    
    public static void main(String[] args)
    {
        System.out.println("5科目のテストの点数を入力して下さい。(0〜100点)");
        calcTest(); //点数の入力と集計
        testOutput(); //txtに書き込み
    }
    
    public static void calcTest()
    {
        for(int i=0; i<test.length; i++){
            test[i] = input(curriculum[i] + comm1);
        }
        //test[0] = input(" 国語" + comm1);
        //test[1] = input(" 算数" + comm1);
        //test[2] = input(" 理科" + comm1);
        //test[3] = input(" 社会" + comm1);
        //test[4] = input(" 外国語" + comm1);
        
        for(int i=0; i<test.length; i++){  //合計点・最高点 の計算。
            sum += test[i];
            if(max<test[i]) max = test[i];
        }
        
        System.out.println("5科目の合計点は" + sum + "点です。");
        System.out.println("5科目の平均点は" + (sum / (double)test.length) + "点です。");
        System.out.println("最高点は" + max + "点です。");
    }
    
    public static void testOutput()
    {
        try{
            PrintWriter pw = new PrintWriter
            (new BufferedWriter(new FileWriter("test.txt")));
            
            for(int i=0; i<test.length; i++){
                pw.println(curriculum[i] + "の点数は" + test[i] + "点です。");
            }
            pw.println("5科目の合計点は" + sum + "点です。");
            pw.println("5科目の平均点は" + (sum / (double)test.length) + "点です。");
            pw.println("最高点は" + max + "点です。");
            System.out.println("test.txt に書き込みました。");
            
            pw.close();
        }catch(IOException e){
            System.out.println("入出力エラーです。");
        }
    }
    
    public static int input(String txt)
    {
        System.out.println(txt);
        
        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));
        String str = null; //入力用 初期化 null
        int num = 0;       //入力用
        
        try{
            str = br.readLine();
        }catch(IOException e){
            System.out.println("入出力エラーです。");
        }
        
        try{
            num = Integer.parseInt(str);
        }catch(Exception e){
            System.out.println("数値以外が入力されました。 0点を代入します。");
            num = 0;
        }
        
        if(num<0 || num>100){  //入力した点数の確認
            System.out.println("0点から 100点で入力して下さい。");
            num = 0;
        }
        
        return num;
    }

}

とりあえず、txtに出力できた。。

今日の教訓
 クラスを分けたらどうなるのかな。
 考えてみよう。

2019年6月7日金曜日

やさしいjava 6版 Lesson3 練習問題 5 (例外処理・メソッドにて入力)

やさしいjava 6版
「Lesson3」 練習問題 5を

「Java入門教室」
 に記載してあった ”汎用性のあるメソッド”を使った物を使って
 作ってみよう。

 元々は 身長と体重を都度 入力して その数値を 表示するもの。


🌟練習問題 3-5

// メソッド public static double input(String txt) ~ return Double.parseDouble で返す に変更
// throws IOException → try~catch文に 変更

import java.io.*;

class SampleP5_1
{
    static double height = 0.0; //フィールド クラス変数 身長
    static double weight = 0.0; //フィールド クラス変数 体重
    
    public static void main(String[] args)
    {
        System.out.println("身長と体重を入力して下さい。");
        Sintaisokutei();
    }
    
    public static void Sintaisokutei()
    {
        height = input(" 身長は 何cm ですか?");
        weight = input(" 体重は 何kg ですか?");
        System.out.println("身長" + height + "cm。体重" + weight + "kg です。");
    }
    public static double input(String txt)
    {
        System.out.println(txt);
        
        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));
        String str = null;     //try~catch文をまたぐ為 str を宣言 初期化が必要
        
        try{
            str = br.readLine();
        }catch(IOException e){
            System.out.println("入出力エラーです。");
        }
        
        try{
            return Double.parseDouble(str);
        }catch(Exception e){        //エラーの場合 0.0を返す
            System.out.println("数値以外が入力されました。");
            return 0.0;
       
    }

}

まだ改良出来る所はあるのかな。

今日の教訓
 まだまだ 続けて勉強しよう。

2019年6月5日水曜日

やさしいjava 6版 Lesson3 練習問題 4 (例外処理)

やさしいjava 6版
「Lesson3」 練習問題 4
 
 (IOException e)
 (Exception e)
 を用いて 例外処理を行いました。
 throws → try〜catch文 に変更をしました。
 int は初期化が不要なのに対して
  String、及び double には初期化が必要な事が 分かりました。

🌟練習問題 3-4

import java.io.*;

class SampleP4
{
    public static void main(String[] args)
    {
        System.out.println("円周率の値はいくつですか?");
        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));
        
        String str = null; //入力用 String 初期化が必要 null
        double pi = 0.0;   //入力用 double 円周率 初期化が必要 0.0
        
        try{
            str = br.readLine();
        }catch(IOException e){
            System.out.println("入出力エラーです");
        }
        
        try{
            pi = Double.parseDouble(str);
        }catch(Exception e){
            System.out.println("数値以外が入力されました。 3の値を入力します。" + "\n");
            pi = 3.0;
        }
        System.out.println("円周率の値は"+ pi +"です。");
    }

}

例外処理、頑張ってみよう。

今日の教訓
 少し 解ったつもり。

2019年6月3日月曜日

Java入門教室 Chapter10「図形を描こう」②

「Java入門教室」

Chapter10「図形を描こう」
 色を指定して 図形を描くプログラム。

 この前は
 サンプルプログラムを少しだけ加工して、
 始点・終点の数値を入力して、
 直線を引くように 変えてみましたが、
 直線の色を選択出来る様にしたかった。

 これが、出来ない。
 どうすれば良いのかな。

 まあ、そのうち出来るようになるさ〜

 
今日の教訓
 この本の 次に進んでみよう。