JAVA関連のことを調べてみた2019年11月20日

JAVA関連のことを調べてみた2019年11月20日

用語解説:メンバ変数 / ローカル変数

【メンバ変数】とは

・クラスの中にある変数
・オブジェクトの属性を定義したもの
・データを受け取るための変数
・オブジェクトが持つパラメータ

(例)

◇概念イメージ

オブジェクト:うちのうさぎ ・・・モノ
メンバ変数 :可愛い、怖がり、ドジ ・・・どんなものか
メソッド  :寝る、食べる、跳ねる、走る ・・・どう動けるか

◇コードのイメージ

“`java

public class Rabbit{

Int age; //メンバ変数 年齢を格納
String personality; //メンバ変数 性格を格納

void setAge(int newAge){
age = newAge;
}

Int getAge(){
return age;
}
}
“`

——————————————

【ローカル変数】とは

・プログラム内の限定された範囲でしか参照できない変数
・メソッド内で宣言した変数はそのメソッドの外では参照不可
・if文、for文内で宣言した変数はその文節の外では利

元記事を表示

新しいソートアルゴリズム作ってみたけど、本当に新しいのか知識ないからわからない

#新しいソートアルゴリズム作ってみたよ!
ふとした瞬間に、ソートアルゴリズムを思いつきました。
「なんか、うまくいくんじゃね?」と思い、その辺の紙切れに少し流れを書いてみたところ、特におかしな点はなさそう。「じゃあ、実装するか!w」のノリで実装しました。

最近ネタ不足で、過去プログラムの紹介ばかりしていますが、これもその一つで、javaでの実装です。
これは大体1年前のものだった気がします。

#アルゴリズムの名前は”ハノイソート”
この命名の理由は、二つのスタックを使ってソートを実現するその動きがハノイの塔を解く様に似ていたからです。

ハノイの塔.png

以下に、ハノイソートでソートを行う様子を示します。

![hanoi.gif](https://qiita-image-store.s3.ap-north

元記事を表示

Javaプログラミング (クラスの構成)

#クラスの概念
Javaでは避けては通れないクラスについて概要について紹介します。変数と簡単な計算を知っていれば読めます。逆に深いことはこの記事では紹介しません。多分、こういう構成で書くのは珍しいんじゃないかしら?
##クラスとは
厳密なクラスの定義はほかの記事や書籍に譲るとして、クラスとはJavaを作るものです。実際にJavaのいろいろな機能はクラスで定義されています。そして、クラスを自分で作ることで、自分の思う機能を創ることが出来ます。

##クラスの構成
それではクラスを実際に構成してみましょう。ここではTestクラスを作ってみます。
クラスには変数とメソッドといわれる処理があります。Testクラスを日本語で作ってみましょう。

“`java
public class Test(){
/*
*クラスの変数をここらへんで宣言
*/
/*
*ここで、クラスのなかで実現したい処理’メソッド’を定義
*/
}

“`

###クラスの変数
クラスの変数は次のように書きます。

“`java
private int a = 4;
“`
ここでは、aという整数型の変数に4を

元記事を表示

Spring Data JDBCでInsertできなかった件のメモ

なんとなく復習してたSpring Data JDBCでハマったのでメモ。
(ベースにしたSpring bootがちょっと古いけど・・。)

##環境
* Spring boot 2.1.2
* Spring Data JDBC 1.0.4
* PostgreSQL 10.5

##やろうとしたこと
単に、Spring Data JDBCでテーブルにオブジェクトを保存(レコードをInsert)しようとしただけ

##ハマった原因
どうも、Spring Data JDBCは@IDをつけたフィールドがオブジェクト型の時はnullのときはInsert、nullじゃないときはupdateでSQLを発行するらしい。
テーブルのPKがAuto Generatedじゃないとだめよってことね。

参考
https://stackoverflow.com/questions/50371775/why-does-spring-data-jdbc-not-save-my-car-object

##サンプルコードで動かしてみる
オブジェクト

“`Users.java
public class User

元記事を表示

JavaにおけるString型の等価比較に関して

#概要
プログラミング言語の「Java」において等価を表す比較演算子は「==」がサポートされていますが、String型といった**プリミティブ型**ではない**参照型**の比較を行う際に使用すると思わぬ処理結果になります。結論から書きますと、**参照型の値が等しいかどうかを比較する際に等価演算子「==」を使用してはいけません。**

当記事では、なぜString型の比較を行う際に等価演算子を使用してはいけないのか、また使用した場合にどうなってしまうのかに関して書いていきます。但し、今回はString型のみにフォーカスした記事になりますが、これは参照型全般の話でもあります。

#基礎知識
##プリミティブ型(基本データ型)
プリミティブ型は、それ自体でデータそのものを表し、データを操作するための振る舞いを持っていない型になります。
プリミティブ型にnullを代入することができません。
※この場における「**振る舞い**」とは、データを操作するための**メソッドや処理**と解釈していただいて構いません。

例えば以下の型があります。

– byte
– short
– int
– long

元記事を表示

AndroidのUDPクライアントに遅延を自分で設定できるようにしてみた

#前回からの変更点
前回のプログラムでは遅延時間を500ミリ秒に設定していましたが、加速度センサの値を計測するにあたり、動作検地をする場合に遅延時間を早めるために遅延を自分で調整できるように改善しました。

#ソースコード
“`xml:AndroidManifest.xml

“`
AndroidManifest.xmlにインターネットを使用できるパーミッションを追加しないと動作できないので気をつけること。(2敗)

“`xml:activity_main.xml

元記事を表示

【Java】JavaでKClassを取得する【Kotlin】

# やること
`Kotlin`では以下のようにして`KClass`を取得できます。

“`kotlin
val myKClass: KClass<*> = MyClass::class
“`

この取得処理を`Java`で行います。

# やりかた
`JvmClassMappingKt.getKotlinClass`でできます。

“`java
final KClass myKClass = JvmClassMappingKt.getKotlinClass(MyClass.class);
“`

元記事を表示

10進数→2進数変換は難しすぎて筆算じゃないとできないよ!!

#2進数変換は高校数学で習った
某国立大学情報学部に通う僕は、最近情報科学系の実験で2進数をよく使うようになってきました。
実験では、FPGAと呼ばれる集積回路を積んだ基板のようなボードのようなものに、設計した論理回路を送り込んで「1たす1ができたぞおおお」みたいな小学生のような大学生のようなことをしています。
意味わからないですよね、符号つき2進数は正の数と正の数を足して負の数になったりするのですから面白い。
しかしながら20年間慣れ親しんできたのは10進数ですし、物事は基本的に10進数で考えます。僕の脳ミソは仮面ライダーゼロワンではありません。(実際の仮面ライダーは見ていないので知りません)
流石に、5〜6桁くらいまでは暗算でも10進数⇔2進数の変換はできますが、それ以上の桁数になると、計算機を使うか手計算をします。
今回の記事では、最近古いパソコンを漁っていたら昔作った10進数→2進数変換プログラムが発掘されたので、ご紹介しようと思います。

#まずはプログラムを
今回はjavaで書きました。
大学1年生の頃はjavaしか触れなかったので、この世には日本語と英語とjavaしか言語

元記事を表示

【Kotlin/Android】Listenerのかきかえ

“`main.java
// idがswitchButtonのSwitchを取得
Switch switchButton = (Switch) findViewById(R.id.switchButton);
// switchButtonのオンオフが切り替わった時の処理を設定
switchButton.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton comButton, boolean isChecked){
// オンなら
if(isChecked){
}
// オフなら

元記事を表示

javacとjavaのバージョンを何度試しても合わせられない原因は、謎のJavaにあった

# 環境
購入元: 株式会社マウスコンピューター
ノート/デスクトップ: デスクトップPC
OS: Windows 10 Home 64ビット
CPU: インテル(R) Core(TM) i5-7400 プロセッサー ( 4コア / 4スレッド / 3.00GHz / TB時最大3.50GHz / 6MBキャッシュ )
メモリ: 16 GB (購入時点では8 GB)
HDD: 1TB HDD ( 7200rpm / 6Gbps 対応 )
SSD: 無し
グラフィックス: インテル HD グラフィックス 630
下記内容の実施日:2019年11月12日

# Hello worldで実行エラー
Javaを始めようと思い、環境構築のためEclipseとJDKをインストールし、Eclipseを日本語化した。
早速「Hello world」を出力しようと思い、ほぼコピペのコードをHello.javaに保存し、
`> javac Hello.java`
でコンパイル成功。
`> java Hello`
で実行したが、エラーが発生。

“`
Error: A JNI error has occ

元記事を表示

Androidアプリを初めてPlay Storeへリリースした話。

#概要
## 自己紹介
どうも、関東圏のWeb業界で活動しているフリーランスエンジニア(26歳)です。
正直に申しますと、Androidアプリ自体を今回初めて作ったので、Android業界における常識的な営みはまったくわかりません。

##何の記事?
先に言っておきますが、開発時に感じたことや技術ノウハウ等は当記事では触れません。
あくまでも、こういうアプリを作ってリリースする時にこういうことをしたよ、というようなことを簡単に書いていきます。

#なんのアプリを作ったの?
Duolingoに登録されているユーザのアカウントと同期化し、Duolingoで学習した全ての単語から探したい単語を簡単に検索することができるAndroidアプリです。さらに、単語リストから参照したい単語をタップすると、翻訳や品詞といったその単語の詳細情報も確認することができます。

https://play.google.com/store/apps/details?id=dev.app.ks.thinkit.duovoc

要点をまとめると以下のような感じです。

– Duolingoで学習した単語を管理できる。

元記事を表示

Long型配列の降順ソート(Java)

# Long型配列のソートはTLEする

以下問題で、Long型の降順ソートが必要になり、**TLE**してしまいました。
https://atcoder.jp/contests/abc123/tasks/abc123_d

long型配列のソートの計算量は、$O(NlogN)$なのに、
**Long型配列のソートの計算量は、$O(N^2)$になる**ようです。

| long[]のソート | Long[]のソート |
|—————–|—————–|
| $O(NlogN)$ | $O(N^2)$ |

じゃあlong型配列だけ使えばいいかと思いきや、
**long型は降順ソートできない**という問題がありました。
(compareToメソッドがLong型配列でないと使えない)

“`java:昇順ソートはlong型で実行可能。
long a[] = {略};
Arrays.sort(a); //long型なのでO(NlogN)
“`

“`java:降順ソートはLong型でないと出来ず、

元記事を表示

Spring Boot エラーページの最低限のカスタマイズ (ErrorController インターフェースの実装)

## 概要
– Spring Boot のデフォルト設定では 404 Not Found や 500 Internal Server Error が発生した際に Whitelabel Error Page や JSON が返される
– Web ブラウザからのアクセスには HTML を返すようになっている
– curl などのマシンクライアントからのアクセスには JSON を返すようになっている
– 独自に設置した error.html や error/404.html では JSON が返されるのを止めることができない
– ErrorController インターフェースを実装したクラスを用意してエラー時に返す HTML や JSON をカスタマイズしたほうが良い
– 今回の動作確認環境: Java 11 + Spring Boot 2.2.1

## 最低限のエラーページ実装例

エラー発生時はすべて 404 Not Found として表示する。

### ErrorController インターフェースの最低限の実装クラス

“`java
import org.sprin

元記事を表示

Spring Boot の Whitelabel Error Page と JSON レスポンス

Spring Boot のデフォルトの状態では、404 Not Found 等が発生した際に Whitelabel Error Page というエラーページが表示される。

“`
Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Nov 18 22:16:56 JST 2019
There was an unexpected error (type=Not Found, status=404).
No message available
“`

curl で同等の動きを確認するには -H オプションでリクエストヘッダに accept: text/html を指定する。

“`
$ curl -H “accept: text/html” http://localhost:8080/

Whitelabel Error Page

This applicat

元記事を表示

Javaプログラミング (変数とデータ)

#プログラミングと変数
この記事では変数について紹介します。変数はプログラミングで避けては通れないものです。結局、プログラミングは変数を操作してどうなっていくかとか、情報をやり取りさせるわけですから。
##変数の型
Javaでは変数に型というものが定義されています。
「これは文字列の型」とか「整数の型」、「実数の型」とかいろいろあります。
一覧にすると

|型|中身|
|—|—|
|String|文字列|
|int|整数|
|double|実数|
|boolean|真 or 偽|
他にもありますがこれくらい知っていればいいでしょう。
##変数の使用
Javaでは変数は勝手に使っていいものではないです。
使う前に、この文字をこの型の変数で使いますと宣言しないといけません。

“`java
double a;
int b = 2;
String c;
boolean d;
“`

こうすることで例えば変数を

“`java
a = 0.5;
a = a + 1.2;
“`
と操作することが出来ます。
この時点で変数aは1.7となります。
また、変数は宣言をするときに値を決

元記事を表示

db の接続のメモ

#DB接続メモ(大雑把に書きました)

“`java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

Connection con;
preparedStatment pstmt;
ResultSet ts;

//1.DBと接続

con = DriverManager.getConnection(
“jdbc:mysql://(DBのアドレス)”,
“(sqlid)”,
“(sqlpassword)”
);

//2.dbとやり取りする
pstmt = don.prepareStatement(sql文);

//3.selectb分の実行と結果を代入
rs.pstmt.executeQuery();

//4.結果を表示
while(r

元記事を表示

[ java ] 抽象クラス

前回の記事ではインターフェースについて述べた。
https://qiita.com/QiitaD/items/835ed6ee4e52cb6b214a
今回は、インターフェースとしばしば比較される「抽象クラス」について記す。

##抽象クラスとは
抽象メソッドを一つ以上持つクラスのことである。抽象メソッドはサブクラスで必ず実装しなければならないので、開発者にオーバーライドを強制することができる。

##扱い方
抽象クラスを扱ううえで以下のようなルールがある。
1. インスタンス化できない
2. 抽象メソッドをオーバーライドしなければならない
3. サブクラスでコンストラクタの記述が必要である。

##インターフェースとの相違点
以下が相違点を表にしたものである。

| | 抽象クラス | インターフェース |
|:———–|:————:|:————:|
| 実装を持つメソッド | 実装可 | 実装不可 |
| メンバ変数 | クラスのメンバ変数 | 定数 |
| 多重継

元記事を表示

スレッドセーフなリスト

##並列処理怖いよって話
リストについて基本的に注意すべきですが、こと並列処理に関しては
マルチスレッドに要注意です

たとえば

“`だめ.java
private static List list = new ArrayList<>();

private static Consumer qwe = v -> list.add(String.format(“%s: %s”, Instant.now(), v));

public static void main(String[] args) {
IntStream.range(0, 9).boxed().collect(Collectors.toList()).parallelStream().forEach(qwe);
list.forEach(System.out::println);
}
“`

これの結果は

“`結果
null
null
null
2019-11-08T17:37:22.279Z: 7
2019-11-08T17:37:22.313Z: 3
20

元記事を表示

25歳専門新卒がSESに就職して半年が経ち、転職を決意。

【専門学校時代の経歴】

システム開発コースを専攻。

・1年次
4月~10月 基本情報技術者試験の勉強。『不合格』
11月~2月 Javaオラクルブロンズの勉強。『合格』
3月~   基本情報技術者試験の勉強。『合格』

・2年次
4月~7月 Javaオラクルシルバーの勉強。『合格』
7月~10月 応用情報技術者試験の勉強。『不合格』
11月~3月 卒業研究 

※C言語、C#、Javaでプログラミングもやってました。

【入社してからの経歴】

4月~6月 入社式当日運用部署に配属決定。
     3か月間の意味のない研修のスタート。

素直に「は?」って思いました。システム開発希望で入社してたので意味が分からなかったですね。
研修はほぼ自習勉強でしたね。時間の無駄です。

7月~11月 常駐先決定。

金融システムのサーバ保守業務。

とりあえず、やりがいがありません。

配属ガチャ、案件ガチャ共にハズレを引きました。人によっては良いかもしれませんが、5年後10年後のキャリアアップを見据えてやりたい事があったので個人的にはハズレです。

いかんせん、サーバの保守に興味が持てません

元記事を表示

Streamの生成処理

Java8から導入されたStreamAPI
Collectionの操作に便利な処理がたくさんある
(いまさらになるが)メモ的な感じで列挙していこうと思う。

StreamAPIとは
Stream自体はListやMapなどのCollection要素ではなく、配列やリストなどの要素に対して生成処理、中間処理、終端処理を加えて新しい要素に置き換えるためのパイプラインのようなものという認識

## Stream#of

“`java
Stream stream = Stream.of(“a”,”b”,”c”);
“`

## Collection#stream

Listからの生成

“`java
List list = Arrays.asList(“a”,”b”,”c”);
Stream stream = list.stream();
“`

Mapからの生成

“`java
Map map = new HashMap<>();
Stream> stream =

元記事を表示

OTHERカテゴリの最新記事