プロセス制御
Scannerツールクラス
Scannerは、コンソールからユーザー入力を読み取ることができます。コンソール入力は本質的に文字データであり、Scannerは呼び出されたメソッドに基づいて文字を指定された型に解析します。
基本的な使い方
Scanner scanner = new Scanner(System.in);
int number1 = scanner.nextInt();
System.out.println(number1 + 1);
int number2 = scanner.nextInt();
System.out.println(number2 + 1);
入力を読み込むとき、プログラムはユーザーの入力を待って確認します。
一般的なアプローチ
| 方法 | 作用 |
|---|---|
nextInt | 1つのintを読み取り、解析する |
next | 1つのdoubleを読み取り、解析する |
next | 空白で区切られた次の文字列の読み込み |
nextLine | 行終端文字なしで現在の行の残りを読み込む |
nextInt()とnextDouble()の直後にnextLine()を呼び出す場合、前のメソッドが行終端文字を残す可能性があることに注意してください。
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
scanner.nextLine();
String name = scanner.nextLine();
1 文字を読み込む場合、最初の文字を取得する前に文字列を読み込むことができます。
String text = scanner.next();
char value = text.charAt(0);
条件式
条件式は三項式とも呼ばれ、構文は以下の通りです。
布尔表达式 ? 值1 : 值2
ブール式がtrueの場合、結果は値1になり、それ以外の場合は値2になります。
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);
条件式は単純なバイナリ割り当てに適しており、多くのビジネスロジックには適していません。
条件ステートメント
ifステートメント{{ifぶん}}
ifは、ブール式の結果に基づいて実行分岐を選択します。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期(1~7):");
int week = scanner.nextInt();
if (week == 1) {
System.out.println("升旗仪式");
} else if (week == 2) {
System.out.println("下午放假");
} else if (week == 3 || week == 5) {
System.out.println("上体育课");
} else if (week == 4) {
System.out.println("上科学课");
} else {
System.out.println("放假");
}else ifとelseは、ifブランチの後に続く必要があります。分岐は上から下へ判断し,ある条件が成立すると,残りの分岐は実行されない.
switch 文{{switchぶん}}
switchは、1つの値に基づいて複数の離散枝をマッチングするのに適している。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期(1~7):");
int week = scanner.nextInt();
switch (week) {
case 1:
System.out.println("升旗仪式");
break;
case 2:
System.out.println("下午放假");
break;
case 3:
case 5:
System.out.println("上体育课");
break;
case 4:
System.out.println("上科学课");
break;
default:
System.out.println("放假");
}従来のswitchは、byte、short、char、intおよび対応するパッケージングクラスをサポートし、列挙およびStringもサポートし、long、float、double、booleanはサポートしていません。
caseにマッチした後、break、returnが実行されないか、例外がスローされない場合、プログラムは後続の分岐を実行し続けます。複数のcaseが1 段の論理を共有する場合には,パススルーを意図的に利用できる.
ループ文{{るーるぶん}}
for 循環する
サイクル回数が明確な場合には,通常forサイクルを用いる.
for (int i = 1; i <= 5; i++) {
System.out.println("Hello World");
}
実行順序は以下の通り。
-
初期化式は1 回実行される。
-
循環条件の判定。
-
条件が
trueのときにループボディを実行する. -
更新式を実行し、条件判断に戻ります。
よくある例:
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
for (int i = 5; i >= 1; i--) {
System.out.println(i);
}
for (char value = 'a'; value <= 'z'; value++) {
System.out.println(value);
}1から10の合計を計算するには、次の手順に従います。
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
System.out.println(sum);
偶数和を計算する場合、ループ変数を2ずつ増加させることができる。
int sum = 0;
for (int i = 2; i <= 10; i += 2) {
sum += i;
}
空の条件は無限ループを形成することができる。
for (;;) {
System.out.println("hello");
}
実際のコードには明確な終了条件が必要です。
ネストされたループ
ループ本体にループを再び含めることを入れ子ループと呼びます。
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 4; j++) {
System.out.println(i + "," + j);
}
}
外側ループがn回実行され、内側ループごとにm回実行されると、内側ループ本体は合計n * m回実行されます。
whileループを
継続条件のみが明らかで具体的な回数が明らかでないは通常whileを用いる.
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
Do…。whileループを
do...whileはループ体を先に実行し,条件を判断するため,ループ体は少なくとも1 回実行される.
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);
メニューインタラクションや条件を満たさないランダムな位置の再生成など、“一度実行してから続行するかどうかを決定する”シナリオに適しています。
ループ制御キーワード
break
breakは直ちに現在のサイクルを終了します。
for (int i = 1; i <= 5; i++) {
if (i == 2) {
break;
}
System.out.println(i);
}
ラベルは外側ループの終了を指定できますが、プロセスがわかりにくくないように注意して使用してください。
outer:
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
if (j == 2) {
break outer;
}
System.out.println(i + "," + j);
}
}continue
continueは現在のラウンドを終了し、次のラウンドに進みます。ラベルと組み合わせて、指定したループの次のラウンドにジャンプすることもできます。
for (int i = 1; i <= 5; i++) {
if (i == 2) {
continue;
}
System.out.println(i);
}
循環問題の分析方法
包括的な法律
すべての可能な値をリストし、条件に基づいて結果をフィルタリングします。検索範囲が限られている問題に適しています。
再帰の法則
既知の状態から始まり、後続の状態は、順および逆推論を含む固定関係に従って徐々に計算されます。
グラフィック·トピック
グラフィック問題は通常、入れ子ループを使用します。外側のループでは行数を制御し、内側のループでは各行の出力内容を制御します。
直角三角形のこと
for (int row = 1; row <= 5; row++) {
for (int column = 1; column <= row; column++) {
System.out.print("*");
}
System.out.println();
}
ダイヤモンド型
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
for (int row = 1; row <= size; row++) {
for (int space = 0; space < size - row; space++) {
System.out.print(" ");
}
for (int star = 1; star <= 2 * row - 1; star++) {
System.out.print("*");
}
System.out.println();
}
for (int row = size - 1; row >= 1; row--) {
for (int space = 0; space < size - row; space++) {
System.out.print(" ");
}
for (int star = 1; star <= 2 * row - 1; star++) {
System.out.print("*");
}
System.out.println();
}素数の判定
素数は1より大きく、1とそれ自身の2つの正の因子しか持たない整数である。
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
boolean prime = number >= 2;
for (int divisor = 2; divisor <= number / divisor; divisor++) {
if (number % divisor == 0) {
prime = false;
break;
}
}
System.out.println(prime ? "是质数" : "不是质数");なぜなら、合成数が平方根よりも大きい因子を持つならば、平方根よりも小さい対応する因子も存在しなければならないからである。
100と200の間の素数を出力する。
for (int number = 100; number <= 200; number++) {
boolean prime = true;
for (int divisor = 2; divisor <= number / divisor; divisor++) {
if (number % divisor == 0) {
prime = false;
break;
}
}
if (prime) {
System.out.println(number);
}
}整数の各桁数を取得
次のコードは、ビットから順に非負整数の各ビットを出力します。
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
if (number == 0) {
System.out.println(0);
} else {
number = Math.abs(number);
while (number != 0) {
System.out.println(number % 10);
number /= 10;
}
}Mathツールクラス
int value = -10;
System.out.println(Math.abs(value));
System.out.println(Math.sqrt(16));
System.out.println(Math.pow(3, 5));
System.out.println(Math.round(3.5));
System.out.println(Math.round(-3.5));
Math.sqrt()はdoubleに戻る。整数が完全平方数かどうかを判断するときは、まず平方根を丸めてから積が元の数に等しいかどうかをチェックし、浮動小数点の剰余に直接依存しないでください。
int number = 16;
int root = (int) Math.sqrt(number);
boolean perfectSquare = root * root == number;
System.out.println(perfectSquare);
気に入ったならばコメントを残してくださいね~