miyupaca log

2020-08-02 学習記録

2020/08/02

やったこと

  • Javaのインストール
  • スッキリわかるJava入門
  • AtCoder Beginner Contest 174

じゃばの学習とあっとこーだー。


Javaのインストール

CentOS 7 に Java 8 (OpenJDK) を yum インストールする手順に習ってランタイムと開発環境をインストールする。

yum search java-1.8.0-openjdk // パッケージの検索
sudo yum install java-1.8.0-openjdk // Java 8 (JDK) ランタイムのインストール
sudo yum install java-1.8.0-openjdk-devel // java 8 (JDK) 開発環境のインストール
java -version #バージョン確認

さくっとインストールできました(о´∀`о)

ファイル作成→コンパイル→実行

Main.javaファイルを作成し、テスト用に文字を出力してみる。

public class Main {
  public static void main(String[] args) {
    System.out.println("はろーじゃば!!");
  }
}

このファイルをコンパイル&実行してみる。

javac Main.java // コンパイル!「Main.class」が作られる
java Main // 実行!「.class」はつけない

ターミナル上に「はろーじゃば!!」が表示できた。
ちなみに、適当にtest.javaという名前をつけてコンパイルしようとしたら怒られた。

test.java:1: エラー: クラスMainはpublicであり、ファイルMain.javaで宣言する必要があります

Javaのファイル名は「クラス名.java」じゃないと駄目らしい。

実行まではこちらを参考にさせていただきました。
CentOSでJavaを実行する! -Terra Sea-


スッキリわかるJava入門

スッキリわかるJava入門
書き方、式と演算子、条件分岐と繰り返し、配列、メソッドまで完了。
新しく学んだり、思い出したりしたことを列挙してみる。

第1章 プログラムの書き方

  • Java開発にはコンパイルとインタプリタが必要。

    • コンパイル…ソースファイルをくらいファイルに変換
    • インタプリタ…JVMというしくみでこれを解釈してマシン語に変換しCPUに送る
  • 定数の宣言にはfinalをつける

    final double PI = 3.14;
  • 文字データはシングルクォーテーション、文字列データはダブルクォーテーションを使う。

第2章 式と演算子

  • 強制的な型変換

    int age = (int)3.2;
    System.out.println(age); // 3と出力される

    (int)の部分をキャスト演算子という。
    キャスト演算子は元のデータの一部を失っても強制的に変換しようとする。今回は小数点以下の情報が失われている。

第3章 条件分岐と繰り返し

  • 文を実行させる順番→制御構造

    • 代表的なものとして順次、分岐、繰り返しの3つがある。
  • Javaでは文字列を「==」で比較できない。equalsを使う。

    if(str == "夕陽") {... // NG
    if(str.equals("夕陽")) {... // 正しい文字列の比較
  • do…while文は最低一回はブロックを実行する。
  • 繰り返しを中断する方法

    • break…ブロック内の処理を即座に中断する
    • continue…今回の周回は中断して次の周回に進む

第4章 配列

  • 配列の宣言と要素の作成

    int[] scores; // 配列変数の宣言
    scores = new int[5]; // 要素の作成と代入
    int[] scores = new int[5]; // 同時に行う
  • 初期値の代入までまとめて行う省略記法

    int[] scores1 = new int[] {20, 30, 40, 50, 60};
    int[] scores2 = {20, 30, 40, 50, 60};
  • 配列を回すための拡張for文(JSのorEachみたいなやつ)

    for(int val: scores) { ...}
  • ガベージコレクション

    • Javaは実行中のプラグラムが生み出したメモリ上のゴミを自動的に探し出して片付けてくれる。

二次元配列

int[][] number = new int[2][3]; // 宣言
number[0][0] = 1; // 要素の利用

int[][] scores = {{1 ,2 ,3}, {4, 5, 6}};

System.out.println(scores.length); // 2(列配列(子配列)の数)
System.out.println(scores[0].length); // 3(1つの列配列の要素の数)

第5章 メソッド

  • メソッドの定義の順番は関係ない。mainがはじめに動き、他は同列の存在。
  • オーバーロード

    • 仮引数の型か数が異なれば、同じ名前のメソッドを定義できる
  • シグネチャ

    • メソッド名と引数の数&型の並び順情報のこと
    • つまりシグネチャが重複しなければオーバーロードが許される
  • 値渡し

    • 引数として値そのものが渡される呼び出し
  • 参照渡し

    • 引数としてアドレスが渡される呼び出し
    • 配列などの参照型変数をメソッド呼び出しで渡したとき、メソッド内で値を変更すると呼び出し元にも影響がある。
  • コマンドライン引数

    • 指定したコマンドライン引数が配列に変換されて、mainメソッドに渡される

      // java プログラム名 引数リスト
      java Main ABC DEF GHI

AtCoder Beginner Contest 174

前回C++で挑戦したけどせっかくなのでJavaで参加してみることにした。
C問題で詰まる。今回は数列を扱う問題だったんだけど、コードでやろうとしていることが間違ってはいないけど計算量が多くなった時にうまく動いてなかったっぽい。(テストの入力で値が大きいケースだけ出力が間違っていた)C問題をまず問題なく突破できるかどうかが私の最初の壁。
復習と、これくらいの難易度の問題を過去問で練習する必要がある。

こちらあとでじっくり読みたい。
AtCoder Beginner Contest (ABC)のC問題・D問題を解くための思考プロセスと必要知識 - Qiita


気づきなど

  • いよいよ明日から出勤です。。。入社後も学習記録も残していきたい!
  • 8月はとにかくJavaやる!!プラスLinuxとGitと仲良くなれれば最高。

miyupaca

miyupacaの学習記録ブログです。