- 1. Javaの超基礎(条件分岐)
- 2. Java入門[条件分岐 ifとswitch]
- 3. ScheduledFutureのgetの使い道
- 4. Java Codeシリーズを使ったCI/CD
- 5. 【Java】4乗的ガウスを解く
- 6. リスト型のcontainsがどの程度遅いのか今度こそはっきりさせる
- 7. 「とりあえず今日から一週間でSpringで何か作るプロジェクト」の準備
- 8. nextLine()ではまったワナ
- 9. Moodleからスクレイピングする
- 10. Gradleコマンドで実行したテストをIntellij IDEAでブレークポイント付けてデバッグする
- 11. While(flag) 無限ループを使う時の注意
- 12. 電話番号チェックに NumberUtils#isNumber() を使ってはいけない
- 13. CodeSignal – rotateImageにチャレンジ
- 14. Java超基本文法
- 15. Javaで文字列が数値かどうかを判定する
- 16. Java PDFファイルのプロパティを設定
- 17. SQL Server JDBCでTLSエラーが出る時の対処法
- 18. jarファイルをjdbcドライバも含めて作成する
- 19. Java入門[Javaとは、型と変数・定数]
- 20. 【VBscript、Java】Tumblrのエクスポートファイルからホームページを生成する。
Javaの超基礎(条件分岐)
##はじめに
前にJavaの基礎をやって中途半端だったので、少しずつだけですが学習しています。条件分岐の文法について記事にまとめました。よろしくお願いします。
##if文
javaのif文は「if」の後に()の中に条件式を記述し、その後{}に処理を書きます。“`java
int a = 10;
if (a < 20) { System.out.println("aは20未満"); ``` True以外の処理は{}を閉じた後にelseを記述し、さらに{}に処理を書きます。 ```java int a = 30; if (a < 20) { System.out.println("aは20未満"); } else { System.out.println("aは20以上"); } ``` ifの他に条件式を追加したい場合は{}を閉じた後「else if」を記述し、ifと同じように()に条件式、{}に処理を書きます。 ```java int a = 20; if (a < 20) { System.out.println("aは20未満"); } el
Java入門[条件分岐 ifとswitch]
###プログラムの構造
複雑なプログラムもやっていることは
`順次進行、分岐、繰り返し`
– 順次進行 -> 上から下へプログラムが実行される(前回まとめ)
– 分岐 -> 条件によって違うプログラムが実行される(今回まとめ)
– 繰り返し -> 条件が満たされるまで繰り返し実行される(次回まとめ)#### if文
`if 「もし〜なら、以下の文を実行」`
`else 「それ以外は、〜の文を実行」`という流れになる。“`csharp:Mouse.java
public class Mouse {
public static void main(String[] args){
boolean waitTime = true; // 待ち時間が 「あるかないか」
if(waitTime == true){ // 待ち時間があれば
System.out.println(“このアトラクションは待ち時間があります。”);
} else { // それ以外は
System.out.println(“このアトラクションは待ち時
ScheduledFutureのgetの使い道
定期実行し続ける“`ScheduledFuture“`の“`Future#get“`てどのように使うのだろうか? という疑問が生じた。なので試してみた。
“`java
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();AtomicInteger c = new AtomicInteger(0);
ScheduledFuture> future = scheduler.scheduleAtFixedRate(() -> {
System.out.println(c);
if (c.get() > 3) {
throw new RuntimeException();
}
c.incrementAndGet();
}, 0, 500, TimeUnit.MILLISECONDS);try {
future.get();
Java Codeシリーズを使ったCI/CD
#はじめに
転職活動の際にポートフォリオとして、Javaを使用したアプリケーションを作成しました。
GitHubへソースコードをプッシュすると、AWS上のEC2へデプロイされるように環境を作成した際のメモを残そうと思います。Codeシリーズの作成方法などは他の記事を参照して頂き、本記事では
・デプロイされるときに、自動的に本番環境の設定ファイルでデプロイされるようにしたい!!
となったときに、各種設定ファイル(Mavenのpom.xmlや、CodeBuildのbuildspec.yml、CodeDeployのappspec.yml)の書き方についてざっくり触れていきたいと思います。
どなたかの参考になれば幸いです。
※環境作成から本記事の執筆に時間が空いてしまったため、思い出しながら記載しています。誤りがあってもあしからず・・・
#処理の流れ
GitHubへコードをプッシュ→CodePipelineが起動→CodeBuildでソースコードのビルド(&テスト)→CodeDeployでEC2へデプロイ#イメージ図
![図1.png](https://qiita-image
【Java】4乗的ガウスを解く
僕はこれまで「Ruby on Rails」をメインに勉強してきましたが、現在は「Java」も勉強しています。
ということで僕が過去に「Ruby」で解いた問題を「Java」で解くとどうなるかを試してみました。https://qiita.com/kim-shun/items/a46cc43c31959ff765ea
1⁴ + 2⁴ + 3⁴ + …….. + 40⁴
上記の計算の結果をプログラムで出していきます。
“`java
package example;public class JavaGouse {
public static void main(String[] args) {
int count = 1;
int sum = 0;while (count <= 40) { sum += Math.pow(count, 4); count += 1; } System.out.println(sum); } } ``` これで求めたい値である「21781332」を出すことができました。ただしまだ「
リスト型のcontainsがどの程度遅いのか今度こそはっきりさせる
公開・非公開問わずソースコードを見ているとjava.util.List系のコレクションに対してcontainsメソッドを呼び出しているのを見かけます。
個人的にはcontains使うならjava.util.Set系のコレクションだろというのが染みついているので違和感があるのですが、仮にList系でも件数が少なければそれほど速度を気にすることもないというのは理解できます。
というわけで要素数の違いによってList系とSet系のcontainsでどの程度速度差が出るのか[JMH](https://github.com/openjdk/jmh)を使って検証しました。
:::note warn
以下のベンチマークはあくまで特定のPC上で行ったもので、誰がやっても同じ結果が出るとは限りません。
ListとSetでの速度差が明確に出てくる要素数も環境によって変わる可能性があるので、あくまで参考程度に捉えてください。
:::# ベンチマーク環境
* OS
* Windows10Pro
* CPU
* Core i7-10700 (8core 16thread)
* Mem
「とりあえず今日から一週間でSpringで何か作るプロジェクト」の準備
今日から一週間で、Java初心者がSpringで何か作ります。
# 目次
1. きっかけ
1. プロジェクト開始時点の私のスキル
1. 目的
1. やること# きっかけ
SES企業の面接を受けたら、フレームワークを使えることが大切とのアドバイスを頂いたので、期間を決めて基礎を固めようと思った。# このプロジェクト開始時点の私のスキル
– Javaの基礎は理解。
– スクラッチでGUIを使ったアプリは作成できる。
– リファクタリングは、つまみ食い程度。
– テストも体系的には行えていない。
– 2か月後に、Java SE11の資格(1z0-819)を受験予定なので、範囲内のことに関しては知っている(が、使いこなせるのとは別のことというのも承知している)。
– Javaの開発は、英語でしかやったことがないので、日本語の用語がいまいち分かっていない。考えれば分かるが瞬時には単語が出てこないので、日本語の用語を頭に浸透させるため、Qiitaで記事を書く。
– ちなみにこの世には、SpringとSpring bootというものがあるということを、この記事を書いて初めて知った(それくら
nextLine()ではまったワナ
# nextLine()すると勝手に空文字入力される
###こたえ
https://teratail.com/questions/106725どうやら、`sc.nextInt()` のときの改行が残っているらしく、`sc.nextLine()`が実行されたタイミングで、その改行がユーザーの入力よりも先に入力→Enter実行されてしまうみたい。
`sc.next()`を使うとその症状は起こらない。
Moodleからスクレイピングする
# はじめに
オープンソースのeラーニングプラットフォームである「Moodle」だが、自分で情報を取得し、解析したいと思った。MoodleにはAPIが用意されているため、システム管理者に連絡すれば使えるようになるのかもしれないが、面倒なので自前でスクレイピングできるようにした。
完全なる自分用メモのための記事。# ソースコード
“` login.java
//import文は省略
class login{
public static void main(String[] args){
String UA=”hogehogeBOT 1.0/” //ユーザーエージェント
String id=”aiueo1234″ //ユーザーid
String password=”123456789″ //パスワード
try{
Connection.Response response=Jsoup.connect(“https://moodle.org/login/index.php”)
.userAgent(UA)
.method(Connection.Me
Gradleコマンドで実行したテストをIntellij IDEAでブレークポイント付けてデバッグする
## ナニコレ?
通常はIntellij経由でテストを実行すればブレークポイントを張った場所で止めることができるが、
ターミナルのgradleコマンド経由で実行したテストでも同じことがしたいときのやり方。## 手順
### 1. デバッガの設定をする
`Run` > `Edit Configurations…` を開き、左上の「+」ボタンから「Remote JVM Debug」を選ぶ。
特に設定はいじらずデフォルトのまま「OK」で保存。(port=`5005`)![Screen Shot 2021-08-05 at 11.36.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109747/0241e2bb-59d7-60ec-57e5-e04780c39068.png)
### 2. Gradleコマンドで対象のテストを実行
“`
./gradlew test –tests “HogeTest*” –debug-jvm
“`– `–tests` …実行対象のテ
While(flag) 無限ループを使う時の注意
### はじめに
これは、私が無限ループを使うときに失敗して今後、注意しようと思うことである。
初心者の方で同じ落とし穴に落ちた人の役に立てば何よりである。
そして、これは自分の備忘録でもある。### はじめに
ここで問題になるのは、arraySort()メソッドにおけるwhileの無限ループである。
Whileの無限ループは仕事が終わったらflag=false;にしてループを止めるのであるが、このflag=false;の位置について論じたい。これを私ははじめ、18行目に入れていた。
そしたら、結果は
{31,29,45,77,84,96}となり並び替えが完了していない。
そこで、並び替えの様子を書き出してみた。
![スクリーンショット 2021-08-05 8.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1762776/375f20bd-0ac3-bd7e-147a-817bdfecf433.png)これをみると、ループは調度2回、回ったところで止まっている。
2巡目の最後は
電話番号チェックに NumberUtils#isNumber() を使ってはいけない
> Non-hexadecimal strings beginning with a leading zero are treated as octal values. Thus the string 09 will return false, since 9 is not a valid octal value. However, numbers beginning with 0. are treated as decimal.
> https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html頭にゼロが付いていて16進数でない文字列は8進数として扱われます。
よって9は有効な8進数ではないため、文字列 “09” はfalseを返します。
ただし、(頭ゼロの次が)0で始まる文字列の場合は10進数として扱います。つまり、電話番号の数値チェックで `NumberUtils#isNumber()` を使うと “090” や “080” が数値で
CodeSignal – rotateImageにチャレンジ
コーディングしなさすぎてコーディングを忘れたエンジニアがコーディングを思い出すためにコーティングします。
今回は、アメリカのコーデイング練習サイトCodeSignalの問題「rotateImage」を解いていきます。
サイトによると、この問題はAmazon、Microsoft、Appleの面接で出されたことがあるようです。##問題
画像を表したn×nの2Dの行列が配列として与えられるので、それを時計回りに90度回転して出力する関数を書きます。
たとえば以下であれば、“`Java
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
“`出力はこうなります。
“`Java
rotateImage(a) =
[[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]
“`制約:
1 ≤ a.length ≤ 100
⇨配列の長さは1以上100以下
a[i].length = a.length
⇨画像の縦横の要素数は同じ
1 ≤ a[i][j] ≤ 10^4
⇨配列の中の値は1以上1000
Java超基本文法
##はじめに
就職活動を行なっている中で、企業様からJavaの基礎を使って解く問題が課題で出されまして、触ったことはありませんが、Javaの基礎学習を始めます。よろしくお願いします。
##文字の出力
System.out.print()で、()の中身を出力できます。
文字列を出力させる場合はダブルクオーテーションが必要です。ちなみに「println」ですが、「l」はエルです。
私は「i」だと思いました。
ちなみにセミコロンは必須で文末に必要です。“`java
System.out.println(“Hello World”);
// => Hello World
“`文字列同士の足し算(結合)ができます。計算するときと同じように「+」を使って結合します。
“`java
System.out.println(“Hello” + “新しい私”);
System.out.println(“3” + “5”);// => Hello新しい私
// => 35
“`##数値の出力
数値の場合は、ダブルクオーテーションが必要ありません。
()内で「+」や「-
Javaで文字列が数値かどうかを判定する
なんでこんな初歩的なことを書くかというと、7月18日(日)に行われたJava™プログラミング能力認定試験 1級(サーティファイ)で出題されたのです。
ド忘れしちゃって苦し紛れに書いたのがこれ。
“`java:
boolean isNum = true; // 数値だよ
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
isNum = false; // 数値じゃないよ
}
“`満点だったので合ってはいたようです。
ただ、これだと[全角数字もチェックOKになってしまう点](https://qiita.com/cress_cc/items/a72c25b39f5baaaac4d6)は要注意です。
知識や技能というよりは「妥協する力」を問われる試験だった。実務では正規表現を使うのが正解なんだろうなあ。。
Java PDFファイルのプロパティを設定
今日から、Javaについての話にします。PDF のプロパティは、文書のタイトル、使用しているフォント、セキュリティ設定などのファイル情報を含んでいます。従って、今回はSpire.Doc for Javaというライブラリを使ってPDFファイルのプロパティ、及びカスタムプロパティを設定する方法を紹介させていただきます。
下準備
1.E-iceblueの公式サイトからSpire.PDF for Javaをダウンロードしてください。
SQL Server JDBCでTLSエラーが出る時の対処法
SQL Serverのサーバー側がTLS1を使用していると、セキュリティの制限でエラーとなることがある。
環境
Debian 10
OpenJDK 8 JRE Headless
Python 3.9
SQL Server JDBC 9.2.1.0 Jpn# エラー
“`
com.microsoft.sqlserver.jdbc.SQLServerException: com.microsoft.sqlserver.jdbc.SQLServerException: ドライバーが SSL (Secure Sockets Layer) 暗号化による SQL Server への安全な接続を確立できませんでした。エラー: “The server selected protocol version TLS10 is not accepted by client preferences [TLS12]”。
“`# Javaの場所を探す
“`
$ /usr/sbin/update-java-alternatives -l
java-1.8.0-openjdk-amd64 1061 /u
jarファイルをjdbcドライバも含めて作成する
## 概要
jdbcドライバも含めたjarファイルを作成する方法。
ここでは、Sample.javaというファイルと、sample-jdbc-1.0.0.jarとsample002-jdbc-1.0.0.jarというjdbcドライバを使う例を書く。## Classファイル生成
まずはclassファイルを作成する。
ドライバは`:`でつなぐ。windowsの場合は`;`でつなぐらしい。(未確認)“`
$ javac -classpath “./sample-jdbc-1.0.0.jar:./sample002-jdbc-1.0.0.jar” Sample.java
“`実行
“`
$ java -cp “.:./sample-jdbc-1.0.0.jar:./sample002-jdbc-1.0.0.jar” Sample
“`## jarファイル作成
以下コマンドでjarファイルを作成する。“`
$ jar cvf Sample.jar *.class
“`jarの中身を見てみるとこんな感じ。このまま実行するとエラーになるので、MANIFEST.M
Java入門[Javaとは、型と変数・定数]
Javaの基本的な学習を終えたので、思考整理のための投稿になります
もしも間違っている部分などがあれば、ご指摘などを頂けると幸いです。## Javaとは
1995年に登場したプログラミング言語であり、世界的に有名。
RedMonkが2021年3月に公開した言語ランキングでは以下のような順位
1.JavaScript
2.Python
3.Java
4.PHP
5.C### Javaで開発されたもの
https://evernote.com/intl/jp
https://www.minecraft.net/ja-jp/store/minecraft-java-edition
## Javaの開発
`コード作成 → コンパイル → 実行`になる。
#### コンパイルとは
プログラム言語をコンピュータが理解できる言語に変換すること。
JavaはWindowsでもMacでも環境に左右されずに動作する。**WindowsOSにだけわ
【VBscript、Java】Tumblrのエクスポートファイルからホームページを生成する。
こんばんは。
写真共有サービスのTumblrをご存じですか?写真に特化したSNSで、世界中の写真好きの投稿を見る事ができます。ユーザー数はtwitterやfacebookには及びませんが、SNSのデメリットの誹謗中傷なども(自分が知る限りは)殆ど目に触れる事はなく、とっても快適なサービスです。自分は2014年頃から愛用しており、ほぼ毎週投稿しているので、300件くらいの投稿があります。
今回は、Tumblrに投稿した記事を、ホームページ風にアレンジするプログラムを作りましたのでご紹介します。
事情により、VbscriptとJavaの合わせ技という事もあり、またTumblrのアーカイブも(Tumblr社には申し訳ないですが)非常に使い辛く苦慮しました。
空き時間にちょこちょこプログラムを作り、テストでもバグが大量に出まして、結果6か月かかりました(途中でモチベーションが下がりサボった期間含む・・)。全体像はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402