4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Java学習ノート_140709(条件分岐、条件演算子、論理演算子)

Last updated at Posted at 2014-07-09

条件分岐

Markdownでテーブル使ってみた。rowspan的なシンタックスは今のところないっぽい。

種類 制御文
条件分岐 if, switch
繰り返し for, while, do-while
繰り返し制御 break, continue
例外 try-catch

演算子

関係演算子 : <, >, ==, <=, >=, !=。

以下は関係演算子のサンプル。

IfTest.java
public class IfTest {

	public static void main(String[] args) {
		int a = Integer.parseInt(args[0]);
		int b = Integer.parseInt(args[1]);

		if (a > b) {
			System.out.println(args[0] + "は" + args[1] + "より大きい");
		}
		else if (a < b) {
			System.out.println(args[0] + "は" + args[1] + "より小さい");
		}

		if (a >= b) {
			System.out.println(args[0] + "は" + args[1] + "以上である");
		}
		else if (a < b) {
			System.out.println(args[0] + "は" + args[1] + "以下である");
		}
		
		if (a == b) {
			System.out.println(args[0] + "は" + args[1] + "と等しい");
		}
	}
}

条件演算子

//<条件式> ? <trueのときの結果> : <falseのときの結果> ;`
 System.out.println(score > 50 ? "合格です" : "不合格です");

switch、if文

他言語で理解しているのでノートはしない。

以下は入力値の判定。

InputIf.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputIf {
	public static void main(String[] args) {

		System.out.println("数値を入力してください。");
		BufferedReader 	reader = new BufferedReader(new InputStreamReader(System.in));

		try{
			String str = reader.readLine();
			int i = Integer.parseInt(str);
			/*
			if(i  > 100){
				System.out.println("入力した値" + i + "は100より大きいです。" );
			}else{
				System.out.println("入力した値" + i + "は100より小さいです。" );
			}
			 */
			//三項演算子(条件演算子)を使ってみる
			System.out.println(i > 100 ? "入力した値" + i + "は100より大きいです。" : "入力した値" + i + "は100と同じか小さいです。");
		}

		catch(IOException e){
			System.out.println("エラーです。");
		}
		catch(NumberFormatException e){
			System.out.println("数値を入力してください。");
		}
	}
}

論理演算子

用例
&& または & 論理積
ll または l 論理和
^ 排他的論理和
! 論理否定

問題

BMIを計算するプログラムの発展形を書きなさい。

BMI値 判定結果
18.5未満 やせ
18.5以上 - 25未満 標準
25以上 - 30未満 肥満
30以上 高度肥満
BMISample.java

public class BMISample {

	public static void main(String[] args) {
		//身長、体重を実行時引数で渡す、変数に代入
		double height = Double.parseDouble(args[0]);
		double weight = Double.parseDouble(args[1]);
		//身長をcmからmに変換
		height /= 100;
		//BMI値を計算
		double bmi = weight / (Math.pow(height , 2));
		System.out.println("bmi = " + bmi);
		if(bmi < 18.5){
			System.out.println("やせ");
		}else if(bmi < 25){
			System.out.println("標準");
		}else if(bmi < 30){
			System.out.println("肥満");			
		}else{
			System.out.println("高度肥満");
		}
	}
}

ProcessingとJava

ちょっと頭の休憩的に、JavaとProcessingについて調べて、サンプルコード書き換えたりしてみた。

JavaProcessing.java
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class JavaProcessing extends Applet{
  public void paint(Graphics g){
    g.setColor(Color.white);
    g.fillRect(0, 0, 200, 200);

    g.setColor(Color.black);
    g.drawLine(0, 0, 200, 200);
    g.drawLine(200, 0, 0, 200);
    g.drawOval(25, 25, 150, 150);
  }
}

その他

Eclipseのコード自動整形はctrl + i。

ctrl + shift + fでも整形されるっぽい。違いは後で調べる。

『 Eclipseショートカットキーまとめ - wyukawa’s blog』

Markdown用のリンク作成ブックマークレット作ってみた

ウェブページ参照しながらMarkdownでリンク記述するの面倒臭かったので、ブックマークレットを作成してみた。Chromeあたりでブックマークバーを右クリック→ページを追加→名前は適当に、URLのところに下記コードを改行なしで入力する。

link4md.js
javascript:var url=location.href.split('?rt=na')[0].split('?PSID=')[0].split('?P=')[0].split('?f=topic')[0].split('summary.html?rss')[0].split('&feature')[0].split('&eurl')[0].split('?feedType')[0].split('?vos')[0].split('?utm_')[0].split('index.html')[0].split('?intcid')[0].split('?_c=feed-rss')[0].split('?cid=')[0].split('?FM=')[0].split('&from=')[0].split('?from=')[0].split('?L=rss')[0].split('&lindID')[0].split('?rss')[0].split('?ref=')[0].split('&ref=')[0].split('?set=')[0].split('?ST=')[0].split('&ST=')[0].split('?mail')[0].split('?AAA')[0];var title=document.title;var linkTag ='['+title+']'+'('+url+')';var x = prompt('文字列をコピー',linkTag);

トークン

ソースコードの単語、記号のことをトークンと言う。

進数

10進数 : 普段使ってる表記方法
2進数 : 0と1を使って記述する
8進数 : 0-7の値を使って記述する
16進数 : 0-9,A-Fを使って記述する

よくわからないけどNetBeansで関数操作のリファクタリングを実行してみた

はてぶにJavaの記事がホッテントリに入ってたので読んでみた。

「そろそろJavaみなおしてもええんやで」というプレゼンしてきた - きしだのはてな

for(int num : nums){
    if(num > 10) continue;
    sum += num * 2;
}

コード自体の意味がわかってない状態で、上記コードを実行しようとしてみた。初起動のNetBeans 8.0で新規プロジェクトを作成して、コードコピペしてメニューからリファクタリングしようとしてみたが、なんだか関数操作がでない、というか項目としてない。途方に暮れながらマウスを右往左往させてしていると、行番号のあたりのところで、警告表示が出てるようなので、読んでみるとsumが(numsも)宣言されてないよ、ということらしいので、for文の上で宣言して、関数操作を実行してみた。

すると、該当警告部分をクリックして「関数操作の使用」を選ぶと、以下のように書き換えられた。

sum = nums.stream().filter((num) -> !(num > 10)).map((num) -> num * 2).reduce(sum, Integer::sum);

ちょっと何言ってるかわからない。ので一旦放置して、変換前のコードを読んでみる。

for(int num : nums){...}に関してはJavaお決まりの配列のループ処理の書き方っぽい。

わかってる人にはスコープ外の変数もあることが前提で不要なんだろうけど、わかってないのでコメント含めて書いてみる。

int[] nums = {1, 4, 9, 16, 25}; //nの2乗の配列
int sum = 0; //合計値
for(int num : nums){
    if(num > 10) continue; //num10より大きいとき処理をスキップ
    sum += num * 2; //sumに numの2倍を加算
}
System.out.println(sum); //コンソールに出力=>28

でも

int[] nums = {1, 4, 9, 16, 25}; //nの2乗の配列
int sum = nums.stream().filter((num) -> !(num > 10)).map((num) -> num * 2).reduce(sum, Integer::sum);
System.out.println(sum); //コンソールに出力=>28

と書いて実行すると、エラーが表示されてしまう。

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: Array.stream.filter.map.reduce at javaapplication1.JavaApplication1.main(JavaApplication1.java:21)

filter(),stream(),map(),reduce()のメソッドの意味を調べると、

  • stream() : JDK1.8で採用。
  • filter() :
  • map() :
  • reduce() :

っと、途中でタイムアップ。明日以降調べます。

Java学習ノート_140707 - Qiita

買った本届いてた。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?