##本記事の意図
アウトプットを前提としていないインプットはうんこだよね
と言われたのが頭の片隅から離れず、アルゴリズムを勉強しようと思い立ったものの、
やはり自分の中だけで消化するとそれまでなので、こうやって記事にしていこうと思います。
誰かのためとかではなく、純度100%自分のためなので、それでも「こんな書き方あるよ!」という聖人みたいな方がいらっしゃればコメントに書いて頂けるととても嬉しいです。
「お? 難しいアルゴリズムが学べるのか?」と期待している方はここで command+w してタブ閉じてくださいね!
それではレッツアルゴリズム!
###アルゴリズムって?
学ぼうとしているものってぶっちゃけ何なの?って感じ立ったので
念のためwikiさんに聞いたらこんな感じでした。
同類の問題一般に対し、有限回の基本的操作を、指示の順を追って実行すれば、
解がある場合にはその解が得られ、解がない場合にはそのことが確かめられるように、はっきりと仕組んである手順。」
プログラミングでいうところのループとか配列で繰り返し処理を施したりして
一つの解を求めたり、処理を作ったりする感じっぽいですね。。 触ってみにゃ分からん。
###基本ループ
何事も基礎から、、って言うことでまずは基本ループ。
入力された数字の数だけ "Hellow World!"を出力してください。
何のひねりもないですが、何事も基礎からなのでやってみます。
※アウトプットメインなので、言語化のためにもコメント多めとなりますが悪しからず。。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 入力された数字を int型の変数に格納
int number = sc.nextInt();
// 繰り返しカウントの数字を定義
int a = 1;
// 入力された数字分の要素を持ったString型の配列を生成
String [] array = new String[number];
// 一つ一つの要素に詰めていく
for(int i = 0; i < array.length; i++){
array[i] = "Hello World!";
}
// 拡張for文で要素分だけ出力(aはカウントの値)
for(String b : array){
System.out.println(a+ " > " + b);
++a;
}
}
}
俺のmac % java algo.java
8
1 > Hello World!
2 > Hello World!
3 > Hello World!
4 > Hello World!
5 > Hello World!
6 > Hello World!
7 > Hello World!
8 > Hello World!
いけた!(ガッツポーズ!) となりましたが、なんかfor二回使ってるのがブサイクって言われたので直してみます。。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = 1;
int number = sc.nextInt();
// 入力された分だけ繰り返し出力する
for (int i = 0; i < number; i++){
// カウント数字は 後置インクリメントで増やしていく
System.out.println(a++ + " > Hello World!" );
}
}
}
出力結果も変わらず、最初りよりスマートに書くことができました。
個人的には、とりあえず期待値が出力されるコードを書いてみて、その後に削れる処理がないかなどを見ていく流れを続けていきたいと思っています。。
アルゴリズムに関してはど素人なので、足掻くだけ足掻いて、一歩ずつ改善していければスタンスです。
###基本ループで学んだことは以下
- まずは入力値を基準としてループ数を考えてみる
- ループは常に配列を伴う必要はない
→ 生成→要素の代入→繰り返し処理で出力という余分なプロセスが増えちゃう
基本ループだけでもついついまずは配列のlengthを考えて。。
という思考になりがちだということに気付けたので、やはり基礎、侮るなかれでした。。引き続きやっていきます!