Day07-ユーザーインタラクションスキャナー、シーケンス構造、選択構造
ユーザーインタラクションスキャナー
Scannerクラスを介してユーザー入力を取得します。
Scannerオブジェクトを作成するための基本的な構文:
import java.util.Scanner;
//导入 java.util 包下的 Scanner类
Scanner s = new Scanner(System.in);
//创建一个对象s,来获取用户输入
Scannerクラスのnext()メソッドとnextLine()メソッドを介して入力文字列を取得します。読み取る前に、通常、hasNext()とhasNextLine()を使用して、入力データがまだあるかどうかを判断する必要があります。
例1:hasNext()、next()メソッド
import java.util.Scanner; //导入 java.util 包下的 Scanner类
public class Scanner{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
//创建一个对象scanner,来获取用户输入
if(scanner.hasNext()){
//用hasNext()判断是否还有输入
String str = scanner.next();
//使用next()方法获取用户输入,并储存到字符串str
System.out.println(str);
}
scanner.close();//IO流的类会一直占用资源,需要手动关闭
}
}//输入: Hello World ; 输出: Hello
例2:hasNextLine()、nextLine()方法
//例1第6~10行:
if(scanner.hasNextLine()){
//用hasNextLine()判断是否还有输入
String str = scanner.nextLine();
//使用nextLine()方法获取用户输入,并储存到字符串str
System.out.println(str);
}//输入: Hello World ; 输出: Hello World
2つの入力は同じですが、出力は異なります。
-
next()メソッドには入力が必要です。スペースに遭遇すると、自動的に終了します。
-
nextLine()メソッドはEnterで終わるため、スペースを入力することも入力を入力しないこともできます
-
intやfloatなどの他のタイプのデータ入力があるかどうかを判断するには、hasNextInt()、nextInt()、hasNextFloat()、nextFloat()などを使用します。
【例3】複数の数値を入力し、それらの合計と平均を求めます。Enterを使用して、入力した各数値を確認します。入力を終了し、数値以外を入力して実行結果を出力します。
import java.util.Scanner;
public class Num{
public static void main(String[] args) {
double num = 0;
int i = 0;
Scanner s = new Scanner(System.in);
while(s.hasNextDouble()){
double digtal = s.nextDouble();
num += digtal;
i++;
}
System.out.println(i +"个数的和为:" + num);
System.out.println(i +"个数的平均数为:" + num / i);
s.close();
}
}//输入10 20 30 40 a
//输出4个数的和为:100.0 4个数的平均数为:25.0
シーケンス構造
シーケンス構造は、Javaの最も単純なアルゴリズム構造と基本構造です。
文と文の間で、上から下に進みます。
構造を選択してください
構造を選択した場合
-
単一選択構造の場合:
if(布尔表达式){ 语句1; }//布尔表达式为true时,执行语句1; 否则不执行
-
二重選択構造の場合:
if(布尔表达式){ 语句1; }else{ 语句2; }//布尔表达式为true时,执行语句1; 否则执行语句2。
-
多肢選択構造の場合:
if(布尔表达式1){ 语句1; }else if(布尔表达式2){ 语句2; }else if(布尔表达式3){ 语句3; }else{ 语句4; }//布尔表达式1为true时,执行语句1; 否则判断布尔表达式2,若为true,执行语句2;否则判断布尔表达式3,若为true,执行语句3;否则执行语句4。
-
ネストされた構造との違い
ステートメント1を実行するための条件は、ブール式1が真であることです。
ステートメント2を実行するための条件は、ブール式1がfalseで、2がtrueであるということです。
ステートメント3を実行するための条件は、ブール式1と2が両方とも偽であり、3が真であるということです。
ステートメント4を実行するための条件は、ブール式1、2、および3がすべて偽であるということです。
【例】テストの点数は100点満点、80点以上が優秀、60〜80点が良好、60点以下が不合格です。
import java.util.Scanner; public class Demo{ public static void main(String[] args){ Scanner s = new Scanner(System.in); int score = s.nextInt(); if(score == 100){ System.out.println("恭喜满分!"); }else if(score >= 80 && score < 100){ System.out.println("优秀!"); }else if(score >= 60 && score < 80){ System.out.println("表现良好"); }else if(score >= 0 && score < 60){ System.out.println("不及格,仍需努力。"); }else{ System.out.println("成绩格式错误!"); } s.close(); } }
-
ネストされた構造の場合:
if(布尔表达式1){ if(布尔表达式2){ 语句1; }else{ 语句2; } }else{ 语句3; }
-
複数選択構造の場合とは異なります
ステートメント1を実行するための条件は、ブール式1と2が両方とも真であるということです。
ステートメント2を実行するための条件は、ブール式1が真で2が偽であるということです。
ステートメント3を実行するための条件は、ブール式1がfalseであることです。
複数選択構造の切り替え
多肢選択構造の別の実装は、switchcaseステートメントです。
switch caseステートメントは、変数が一連の値の特定の値に等しいかどうかを判別し、各値はブランチと呼ばれます。
switch(expression){
case value 1 :
//语句
break; //可有可无
case value 2 :
//语句
break; //可有可无
...
...
default : //可有可无
//语句
}
-
switchステートメントの変数タイプは、byte、short、int、またはcharです。Java SE 7以降、スイッチは文字列型をサポートします。
-
switchステートメントには複数のcaseステートメントを含めることができます。各ケースの後には、比較する値とコロンが続きます。
-
caseステートメントの値のデータ型は、変数のデータ型と同じである必要があります。
-
変数の値がcaseステートメントの値と等しい場合、caseステートメントの後のステートメントが実行を開始し、breakステートメントが表示されるまでswitchステートメントはジャンプしません。[casepenetration] **、それ以外の場合、プログラム次のcaseステートメントを実行し続けます。breakステートメントが表示されるまで。
-
switchステートメントには、デフォルトのブランチを含めることができます。これは通常、最後のブランチです。デフォルトでは、実行時間に一致するステートメントと変数値はありません。デフォルトのブランチはbreakステートメントを必要としません。
例1:[ケースの浸透]
public static void main(String args[]){
int i = 1;
switch(i){
case 0:
System.out.println("0");
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
break;
default:
System.out.println("default");
}
}//输出1 2 3。【case穿透】
例2:[JDK7は文字列式を追加します]
public static void main(String[] args) {
String name = "Crown";
switch (name) {
//JDK7的新特性,表达式的内容可以是字符串。
case "明天也有晚霞嘛":
System.out.println("输入为:明天也有晚霞嘛");
break;
case "Crown":
System.out.println("输入为:Crown");
break;
default:
System.out.println("无法匹配");
break;
}
}