2017/08/12

Java的static和non-static

- 被宣告成static的變數、方法,都是被共用的,而且已經存在於記憶體
- 若以時間軸來看,static的變數、方法是一開始就存在於記憶體,
not-static對它而言是「未來式」。所以not-static可以使用或呼叫static
變數、方法,但static不可以使用或呼叫non-static變數、方法

- static method儘量以【類別】名稱來使用它,不要用【物件】名稱

使用static的適當時機

(1)該類別內若不需要儲存任何使用者的資訊,只是純粹做計算
(2)該類別內有【類別變數】,但此【類別變數】是為了讓數個【物件】
共用,此時須注意同步的問題(通常會發生在多執行緒)

2017/08/05

猜數字遊戲(Java)

import java.util.Scanner;

public class GuessNumber {

static Scanner scn = new Scanner(System.in);

public static void main(String[] args) {
int digit = 4;
guessRand(getRandom(digit));
scn.close();
}

public static String getRandom(int digit) {
String stringRandom = "";

for (int i = 1; i <= digit; i++) {
int randomNumber = ((int) (Math.random() * 10));
if (((stringRandom.length() == 0) && (randomNumber != 0))
|| ((stringRandom.length() > 0) && (stringRandom.indexOf(String.valueOf(randomNumber)) == -1))) {
stringRandom = stringRandom + randomNumber;
} else {
i--;
}
}

return stringRandom;
}

public static void guessRand(String randomNumber) {
int A = 0, B = 0;
String userNumber = "";

while (!randomNumber.equals(userNumber)) {
System.out.printf("請輸入%d位數的數字:", randomNumber.length());
userNumber = scn.next();
for (int i = 0; i < randomNumber.length(); i++) {
if (randomNumber.charAt(i) == userNumber.charAt(i))
A++;
else if (randomNumber.indexOf(userNumber.charAt(i)) != -1)
B++;
}
System.out.printf("%dA%dB\n", A, B);
A = 0;
B = 0;
}
System.out.printf("恭喜你答對了,正確數字是" + userNumber);
}
}

2017/07/29

每列顯示N行的九九乘法表(Java)

public class MultiplicationClass {

public static void main(String[] args) {
multiplication_table(3);
}

static void multiplication_table(int column) {
for (int i = 1; i <= 9; i += column) {
for (int j= 1; j <= 9; j++) {
for (int k = 0; ((k < column) && (i + k) <= 9); k++) {
System.out.printf("%d * %d = %d\t", (i + k), j, (i + k)*j);
}
System.out.println();
}
System.out.println();
}
}

}

2017/07/09

日本語の明日

「明日」的漢字的讀法有兩種
あす:原意是「今日の次の日」(きちんとした言葉)
あした:原意是「今日の次の日の朝」、「今日の夜が
終わった後の朝、午前中」(カジュアルな言葉)

更正式的說法是「みょうにち

一般而言,現在大多不會刻意區別,中文都是明天的意思

2017/07/08

React Native開發:props和state

props:可以在初始化Component時傳入一些必要的屬性。

state:Component內的狀態。譬如可以在constructor寫
 constructor(props) {
    super(props);
    this.state = {index: 0};
  }

比較
- props是immutable,不應該在Component裡被修改
- 不應該直接修改this.state,而是用this.setState()

2017/07/06

React Native開發:Flexbox簡介

main axis:若是水平方向則左邊是main start,右邊是main end
(但main axis不一定是水平方向,透過設定flexDirection來決定)
cross axis:與垂直的軸。若是水平方向則上方是cross start,
下方是cross end

Flexbox屬性
容器屬性:包括flexDirection、flexWrap、alignItems、justifyContent
元素屬性:包括flex、alignSelf

其中,alignItems是指在cross axis上的對齊方式,可能的值有:
flex-start、flex-end、center、stretch

justifyContent是指在main axis上的對齊方式,可能的值有:
flex-start、flex-end、center、space-between、space-around

alignSelf可能的值有:
auto、flex-start、flex-end、center、stretch