MENU

【Java】二次元配列とswitch文

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiserukun/20210611/20210611090227.png

自主学中にオセロの作り方を調べていると、二次元配列で目板を作ることが分かりました。実際に多次元配列を使ったことがなかったので、今回ゲーム?感覚で作成しました。

実現したいこと  コマンドライン引数を使用する
 文字で移動させる(上、下、左、右)

class Main{
public static void main(String args[]) {
 int x = 0;
 int y = 0;
       int ban[][] = {
                {11,21,31,41,51,61,71,81,91},
                {12,22,32,42,52,62,72,82,92},
                {13,23,33,43,53,63,73,83,93},
                {14,24,34,44,54,64,74,84,94},
                {15,25,35,45,55,65,75,85,95},
                {16,26,36,46,56,66,76,86,96},
                {17,27,37,47,57,67,77,87,97},
                {18,28,38,48,58,68,78,88,98},
                {19,29,39,49,59,69,79,89,99}
        };
 String a = args[0];
 String[] b = a.split("");
 for(String s : b) {
  switch(s) {
    case "u":
      y--;
    break;
    case "d":
      y++;
    break;
    case "r":
      x++;
    break;
    case "l":
      x--;
    break;
  }
 }
 System.out.println(ban[x][y]);
 }
}

横列をx、縦列をyとしています。

  • splitメソッドでコマンドライン引数の文字列を一文字一文字分解して配列として格納します

  • for文のループ処理で配列から一文字一文字を認識します

  • switch文で上なら"u"、下なら"d"、右なら"r"、左なら"l"としてx、y に値を足していきます

  • x,yの足した値で二次元配列の値を表示します

これをうまく応用すれば、マインスイーパーみたいなゲームができるのではないかと思っています。 現在エラーは出ますが、改良していろいろ試していきたいと思います。

【株主優待】ダイキョーニシカワより株主優待いただきました

f:id:kiserukun:20210619154605p:plain

昨日、ダイキョーニシカワより株主優待が到着しました。ありがたや。

f:id:kiserukun:20210622140638p:plain

配当金+500円のクオカードを一枚いただきました。

今回、優待をもらうのが2回目になるので来年まで100株持てば1000円分のクオカードをもらうことができます。

現在の株価は購入金額より、高いのでまだ不安はありませんが今後どうなることやら・・・

◆株価情報◆(みんかぶより)
一株配当:30円
配当利回り:4.38%
PER:161.9倍
ROE:3.28%
自己資本比率:48.5%

現在アメリカにある新工場の稼働を目指しているみたいです。(2021年) 今後、どのくらい生産性が伸びていくのか楽しみにしています。

ダイキョーニシカワは

人生で初めて購入した株になります。

株を買ってみよう!と思ってから買うまで一年以上かかってしまいました。しかし、悩んだからこそ今があると思っています。

一株投資をしている銘柄では,まだまだ100株に届かないものばかりですが、少しずつ積み立てて配当金の額を増やしていきたいと思います。


最近、また読み返している本


NumberFormatExceptionに悩まされました

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiserukun/20210611/20210611090227.png

NumberFormatExceptionとは

文字列(String型)を数値型(int型)に変換した際に発生します。

docs.oracle.com

今回、解決できた方法

trim()

を使用するとエラーが解消されました。

なぜ発生したか

CSVファイルを読み込み、CSVファイルのデータをString型からint型に変換しようとした際に発生しまた。

以下のようなCSVファイルがあります。

1,だいこん,130
2,にんじん,90

String a = 130; String b = 90; として このような変数を作ると

int sum = Integer.parseInt(a) + Integer.parseInt(b);

結果

java.lang.NumberFormatException: For input string: " 130"
 at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:)

エラー文をよく見ていなかった

初めはtry〜catchで解消しようとしていましたが、他に方法はないか検索に検索をしていました。
しかし、エラー文をよく見ると

For input string: " 130"

と書いてあり、" 130"に半角スペースが空いているのを発見。 その結果

int sum = Integer.parseInt(a.trim()) + Integer.parseInt(b.trim());

こうすると解決することができました。

答えはエラー文の中に潜んでいるものですね・・・ かなり時間食ってしまった・・・泣

【一株投資】投資歴一年が経ち自分自身が感じたこと

f:id:kiserukun:20210619154605p:plain こんにちはkiseruです。 去年の4月から一株投資をしています。

「投資歴一年」

という称号をいただける立場になりました。(自分でそう呼んでします笑) そこで、一年を通して感じたことをご紹介します。

1.毎日株価を見るようになった

平日の朝9時になるとiSPEEDで株価をチェック

日経株価を見た後、お気に入りページを見ます。 お気に入りページには自分が投資した(現在22銘柄)株をまとめているので、今日はどうなっているのか見ています。

始めた当初は放置していましたが、投資金額が増えると見る回数が増えている気がします。

2.配当通知の封筒が来るのが嬉しい

配当通知書がくることがうれしい

1株しか持っていないのに、企業から配当金通知書が届きます。 配当金額は10円とか15円でしたが、自分にとって配当金をもらうより封筒が届いたことがとても嬉しかったです。

もちろん、いまでもうれしいことには変わりません。

3.企業を研究するようになった

今、自分がサービスを受けているお店はどんな会社なんだろう

「いつも行くスーパーの株って買えるのかな?」
「この商品いい商品だけど、どこの会社が作ってるんだろう?」

そんなことを考えるようになりました。株目線で会社を見るようになり一年を通していろいろな会社を知ることができました。もちろん9割は忘れてしまっていますが、物事を見る目線が変わったと思います。

まとめ.一年コツコツ入金した金額

毎月約1~3万円を目標に高配当株に投資をしています。

資産 370,000円
年間配当金額(税引き前) 20,000円

自分自身ではまだまだ勉強不足為、 こびと株さんのポートフォリオを参考に個別で高配当株投資をしています。オススメのサイトです。 kobito-kabu.com

まずは、年間配当金10万円が目標!

Java csvファイルを読み込む方法

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiserukun/20210611/20210611090227.png

CSVファイルとは

CSVとはcomma-separated valuesの略で、カンマで区切られたデータ形式です。

CSVファイルをどのように認識しているのか

JavaではどのようにCSVファイルを認識しているのでしょうか。

例えば下のようなエクセルのCSVファイルがあります。 f:id:kiserukun:20210619135956p:plain

上のCSVファイルはJavaでは

1,だいこん,130円,1個
2,にんじん,90円,1個
3,たまねぎ,50円,1個

のような形で認識します。 「,」カンマが入った形に分解されます。

CSVファイルを読み込む(サンプル)

FileReaderクラスがExceptionを返す可能性があるため、try~catchとthrowsで例外を処理をしています。

import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.BufferedReader;
import java.io.IOException;

public class ReadFile {
public static void main(String[] args) throws IOException {
    try { 
        FileReader file = new FileReader("file.csv");
        BufferedReader csvFile = new BufferedReader(file);
            
        String line;
            
        while((line = csvFile.readLine()) != null) {
            String datas[] = line.split(",");
            for (int i = 0; i < datas.length; i++) {
                System.out.print(datas[i]);
            }
            System.out.println();
        }
        csvFile.close();
    } catch (FileNotFoundException e) {
        System.out.println("ファイルがありません");
        throw e;
    }
}
}

プログラムを実行すると

1だいこん130円1個
2にんじん90円1個
3たまねぎ50円1個


FileReader file = new FileReader("file.csv");
//ファイルを読みます
String datas[] = line.split(",");
//lineをカンマで分割して配列datasに格納します
for (int i = 0; i < datas.length; i++) {
    System.out.print(datas[i]);
 }
//datasの長さの分だけ出力します

ファイルの読み方は別の方法もあるみたいなので、 時間ができたらいろいろ試していきたいと思います。

Eclipseでcsvファイルを読み込む方法

f:id:kiserukun:20210616162529p:plain

EclipseCSVファイルを読み込む

フォルダの位置です。 f:id:kiserukun:20210616163203p:plain eclipseファイル>pleiades>workspace>プロジェクト名 この階層にcsvファイルを置くと読み込むことができました。

絶対パスで示すこともできるみたいです。

C: \ ... \ファイル名.csv

余談ですが

srcフォルダにはファイル名.java

binフォルダにはファイル名.class

srcフォルダはソースコード
binフォルダはローカルにインストールしたプログラム
が入っています。

【Java】ArrayListクラスについて

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiserukun/20210611/20210611090227.png

ArrayListとは

配列とよく似ており、要素が連続して格納されているものです。 まとまったデータを扱いたい時などに使用します。

宣言方法

List<データ型名> オブジェクト名 = new ArrayList<データ型名>();

使用する際は、import文を書く必要があります。

import java.util.ArrayList;  
import java.util.List;  


ArrayListで使えるメソッド

addで要素を追加する、getで要素を取得


public static void main(String[] args) {
        List<String> list = new ArrayList<>();
 
        list.add("東京");
        list.add("大阪");
        list.add("福岡");

        System.out.println(list.get(2));        
    }

福岡

remove(int)でint番目の要素を削除する

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
 
        list.add("東京");
        list.add("大阪");
        list.add("福岡");
        
        list.remove(0);
        
        System.out.println(list.get(0));
        
    }

大阪

0番目の”東京”が削除されています。

setで要素を上書きする

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
 
        list.add("東京");
        list.add("大阪");
        list.add("福岡");
        
        list.set(0,"京都");
        
        System.out.println(list.get(0));
    }
}

京都

indexOf(●)で要素が何番目にあるか検索

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
 
        list.add("東京");
        list.add("大阪");
        list.add("福岡");
        list.add("aa");
        list.add("bb");
        list.add("cc");
        
        System.out.println(list.indexOf("aa"));
    }

3

aaの要素が0番目の”東京”から数えて3番目にあることがわかりました。

まだ、一回しか使用してませんが、学んだので忘れる前にまとめました。