Java---第 3 章
フローチャート
フローチャートの概念:
フローチャートは、統一された標準グラフィックスを使用してプログラムのプロセスを説明するものです。
フローチャートを使用する理由
フローチャートはシンプルで直感的であり、プログラマーにコードを記述するためのアイデアを簡単に提供できます。
グラフィック ルール:
例:
二択構造
単純な if-else
フォーマット:
if (条件)如果条件满足,则执行代码块
{
代码块
}
else 否则执行代码块2
{
代码块2
}
例:
コンソールから整数を入力し、偶数の場合は偶数を出力し、奇数の場合は奇数を出力します
コード実装:
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int a = myScanner.nextInt();
if (a % 2 == 0)
{
System.out.println("偶数");
}
else
{
System.out.println("奇数");
}
}
}
三項演算子の使用
System.out.println((a % 2 == 0) ? "偶数" : "奇数");
ネストされた if-else
例1:
準決勝で勝てば決勝、男子なら男子決勝、勝てなければ女子決勝へ。
失敗したらゲームをやめる
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入是否胜利:Y/N");
String win = sc.next();
if ("Y".equals(win)) {
System.out.println("请输入性别:");
String sex = sc.next();
if("男".equals(sex)) {
System.out.println("进入男子比赛");
} else {
System.out.println("进入女子比赛");
}
} else {
System.out.println("被淘汰");
}
}
}
文字列と変数が等しいかどうかを判断します: .equals()
例 2:
コンソールから整数を入力し、その数値が 10 未満の場合は、その数値を 3 倍して 5 を加算し、最後に計算された数値が偶数 1 か奇数 1 かを出力します。それ以外の場合は、数値が偶数 2 か奇数 1 かを直接出力します。奇数 2
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if(num < 10){
int num1 = num * 3 +5;
if(num1 % 2 == 0){
System.out.println("偶数1");
}else{
System.out.println("奇数1");
}
}else {
if(num % 2 == 0){
System.out.println("偶数2");
}else{
System.out.println("奇数2");
}
}
}
}
複数の if 選択ステートメント (else-if)
例 1:
Xiao Ming は宝くじを買いに行きます。1 等に当たったら 500 W、2 等に当たったら 300 W、3 等に当たったら 100 W を受け取ることができます。それ以外の場合は、報酬はありません
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入中奖等级:");
int dt = sc.nextInt();
if(dt == 1){
System.out.println("一等奖!!!500W");
}else if(dt == 2){
System.out.println("二等奖!!!300W");
} else if (dt == 3) {
System.out.println("三等奖!!!100W");
}else {
System.out.println("没中奖!");
}
}
}
例 2:
コンソールから生徒のスコアを入力します。スコアが 90 ~ 100 の場合、出力は優れています。80 ~ 90 の場合、出力は良好です。60 ~ 80 の場合、出力は中程度です。
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入该学生分数:");
int score = sc.nextInt();
if(score >= 90){
System.out.println("优秀");
}else if(score >= 80){
System.out.println("良好");
} else if (score >= 60) {
System.out.println("中等");
}else {
System.out.println("差生");
}
}
}
switch ステートメント
スイッチはスイッチという意味です
サポートされているデータ型
byte
short
int
char
String
Enum (列挙)
String 型は JDK1.7 以降でのみサポートされています。
ケース 1:
企業が年度末に、研究開発部門の従業員の成績に応じて給与を調整することを決定しました。詳細は次のとおりです。
- レベル1 +500
- レベル2 +800
- レベル3 +1200
- レベル4 +2000
コンソールから従業員の現在の給与とレベルを入力し、給与調整後の給与を出力してください
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入该员工当前薪资:");
double sal = sc.nextDouble();
System.out.println("请输入该员工当前级别:");
int devel = sc.nextInt();
switch (devel){
case 1:
sal+= 500;
break;
case 2:
sal+= 800;
break;
case 3:
sal+= 1200;
break;
case 4:
sal+= 2000;
break;
}
System.out.println("调薪后的薪资为:" + sal);
}
}
ケース 2:
1 年は 12 か月で、季節は 4 つあります。1、2、3 は春、4、5、6 は夏、7、8、9 は秋、10、11、12 は冬です。
要件: コンソールから月を入力し、対応する季節を出力します。
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int month = sc.nextInt();
switch (month){
case 1:
case 2:
case 3:
System.out.println("春季");
break;
case 4:
case 5:
case 6:
System.out.println("夏季");
break;
case 7:
case 8:
case 9:
System.out.println("秋季");
break;
case 10:
case 11:
case 12:
System.out.println("冬季");
break;
}
}
}
より賢い方法
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int month = sc.nextInt();
switch ((month-1)/3){
case 0:
System.out.println("春季");
break;
case 1:
System.out.println("夏季");
break;
case 2:
System.out.println("秋季");
break;
case 3:
System.out.println("冬季");
break;
}
}
}
2 つの入力の検証
ユーザーは整数を入力するように求められますが、ユーザーは文字列を入力します。どうすればよいですか?
.hasNextInt()→ 次の整数がスキャナに保存されているかどうかを確認し、データがない場合はユーザーに入力させ、ユーザーが入力した後、それが整数であるかどうかを判断します
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
if(sc.hasNextInt()){
int a = sc.nextInt();
System.out.println(a);
}else{
System.out.println("别瞎输入");
}
}
}
実行例:
整数を入力してください:
むやみ
に入力しないでください
3つのプログラムのデバッグ
概念:
プログラムに問題が発生した場合、プログラムを一時停止して、コードを 1 行ずつ実行するように操作し、変数の変化がプログラムの考え方の変化と一致するかどうかを観察します。問題を見つけて解決するために、プロセス全体を通して設計を行います。このプロセスはデバッグと呼ばれます。
デバッグが必要な理由:
誰も完璧ではありません。特に複雑なプログラムを作成する場合、すべてを考慮することは不可能です。プログラムに問題がある場合、重要なのは問題を特定することです。特定するには、次のことを行う必要があります。デバッグ
デバッグ方法:
- 有効なコードのブレークポイント
- DEBUG モードでプログラムを開始します。
- プログラムを起動したら、プログラムを一行ずつ実行し、変数の値の変化を観察することで問題点を見つけて解決します。
4つのループ構造
** ループ: ** 同じことを繰り返し実行します。
サイクルの 3 つの要素:
- ループ変数を定義し、初期値を代入する
- ループ条件
- ループ変数の更新
while ループ
文法:
while(循环条件){
//循环操作
}
特徴:
判決が先で、執行は後で。そもそも条件が満たされていない場合、while ループは一度も実行されない可能性があります
ケース 1:
0 から 9 までのすべての数字を出力する
public class study {
public static void main(String[] args) {
int i = 0;
while(i < 10){
System.out.println(i);
i++;
}
}
}
ケース 2:
水仙の数を 100 ~ 1000 の範囲で出力します。水仙の数: たとえば、153 = 1 立方体 + 5 立方体 + 3 立方体。
public class study {
public static void main(String[] args) {
int i = 100;
while(i <= 1000){
int a = i / 100;
int b = i % 100 / 10;
int c = i % 10;
if(a*a*a+b*b*b+c*c*c==i){
System.out.println(i);
}
i++;
}
}
}
do-while ループ
文法:
do{
循环操作
}while(循环条件);
ケース 1:
コンソールから生徒の成績を入力して合計成績を計算し、0 を入力すると終了します
import java.util.Scanner;
public class study {
public static void main(String[] args) {
double score = 0;
double sum = 0;
do{
System.out.println("请输入学生成绩:");
Scanner sc = new Scanner(System.in);
score = sc.nextDouble();
sum += score;
}while(score != 0);
System.out.println("总成绩为:"+sum);
}
}
ケース 2:
コンソールから数値を入力します。数値が 7 で割り切れない場合は、数値が 7 で割り切れるまで再入力します。
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = 0;
do{
System.out.println("请输入一个整数:");
i = sc.nextInt();
}while(i%7!=0);
}
}
forループ
文法:
for(定义循环变量;循环条件;循环变量的更新){
循环操作
}
特徴:
for ループは最初に判定されてから実行されます; 最初に条件が満たされていない場合、for ループは一度も実行されない場合があります; ループ回数が決まっている場合、通常は for ループが使用されます; ループ回数が決まっている場合は、for ループが使用されます不確実ですが、通常はwhile または do - while ループが使用されます。
ケース 1:
1 ~ 10 の累積和を求める
public class study {
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 10; i++){
sum+=i;
}
System.out.println("累加和为:"+sum);
}
}
i のスコープは for ループ構造に限定されます
ケース 2:
6 の階乗を求める (6!)
public class study {
public static void main(String[] args) {
int sum = 1;
for(int i = 1; i <= 6; i++){
sum*=i;
}
System.out.println("6!:"+sum);
}
}
プロセス制御
壊す;
Break は、for ループ、while ループ、do-while ループ、switch ステートメントにのみ適用できます。
効果:
- ブレークはループ構造に適用されます。これは、ブレークが配置されたループを終了し、ループ構造の下でコードを実行することを意味します。通常はif ステートメントと組み合わせて使用されます。
- switch ステートメントに Break が適用され、ブレークが配置されている選択ステートメントが終了することを示します。
ケース 1: (数字当てゲーム)
10 以内の乱数を取得し、コンソールから整数を入力します。入力した整数が乱数と等しくない場合は、入力した整数がランダムな整数と等しくなるまで再入力します。
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double ran = Math.random();
int number = (int)(ran*10);
int input;
do{
System.out.println("请输入一个整数:");
input = sc.nextInt();
if(input > number){
System.out.println("大了");
}else if(input < number){
System.out.println("小了");
}else{
System.out.println("猜对了");
break;
}
}while(true);
}
}
ケース 2:
数値が素数かどうかを判断します。(素数: 1 とそれ自身でのみ割り切れます)
ダブルサイクル(強調)
ケース 1:
九十九九九表を出力する
public class study {
public static void main(String[] args) {
for(int i = 1;i < 10; i++){
//打印九行
for(int j = 1;j <= i;j++){
//j<=i表示列数的最大值就是行号
//print表示在同一行打印,也就是不会换行
System.out.print(j+"×"+i+"="+(i*j)+"\t");
}
System.out.print("\n");
}
}
}
操作結果:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9 1×4=4
2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 1×6=6
2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8=8 2×8=
16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9=9 2×9=18 3×9=27 4×9=
36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
事例2:
プリント:
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
public class study {
public static void main(String[] args) {
for(int i = 1;i <=4; i++){
for(int j = 1;j <=10;j++){
System.out.print("☆");
}
System.out.print("\n");
}
}
}
ケース 3:
印刷:
××××××××××
×aaaaaaaa×
×aaaaaaaa×
××××××××××
public class study {
public static void main(String[] args) {
for(int i = 1;i <=4; i++){
for(int j = 1;j <=10;j++){
if(i==1 || j==1 || i==4 || j==10){
System.out.print("×");
}else{
System.out.print("a");
}
}
System.out.print("\n");
}
}
}
ケース 4:
三角形を印刷する
ペア 5 の分析:
- 三角形が5列あります
- 三角形の最初の行には、三角形と同じ行数があります。
- 三角形の各行の空白の数 = 三角形の総行数 - 列の数
- 三角形の各行の「x」の数 = (行番号 - 1) * 2 + 1
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
int co = sc.nextInt();
for(int i = 1;i <= co;i++){
int space = co - i;
for(int j = 1;j <= space;j++){
System.out.print(" ");
}
int sp = (i - 1) * 2 + 1;
for(int m = 1;m <= sp;m++){
System.out.print("x");
}
System.out.println();
}
}
}
ケース 5:
逆三角形を印刷する:
分析します:
- 三角形が4列あります
- 三角形内の空白の数 = 行の総数 - i
- 三角形の「x」個 = (合計行番号 - 行番号) * 2 + 1
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
int co = sc.nextInt();
for(int i = 1;i <= co;i++){
int space = i - 1;
for(int j = 1;j <= space;j++){
System.out.print(" ");
}
int sp = (co - i) * 2 + 1;
for(int m = 1;m <= sp;m++){
System.out.print("x");
}
System.out.println();
}
}
}
ケース 6:
ひし形を印刷する
分析します:
- 行の合計数は奇数である必要があります
- 上の三角形には対称軸が含まれています
- 上の三角はその上の上の三角の説明です
- 下の三角形はその上にある下の三角形です
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入(奇数):");
int all_co = sc.nextInt(); //总行数
//上三角
int top_co = all_co / 2 + 1;
for(int i = 1;i <= top_co;i++){
int space = top_co - i;
for(int j = 1;j <= space;j++){
System.out.print(" ");
}
int sp = (i - 1) * 2 + 1;
for(int m = 1;m <= sp;m++){
System.out.print("x");
}
System.out.println();
}
//下三角
int down_co = all_co - top_co;
for(int i = 1;i <= down_co;i++){
int space = i;
for(int j = 1;j <= space;j++){
System.out.print(" ");
}
int sp = (down_co - i) * 2 + 1;
for(int m = 1;m <= sp;m++){
System.out.print("x");
}
System.out.println();
}
}
}
ケース 7:
2 ~ 100 以内の素数をすべて出力します。(素数: 1 とそれ自身でのみ割り切れます)
public class study {
public static void main(String[] args) {
for(int i = 2;i<=100;i++){
if(i==2) {
System.out.println(i+"是质数");
}else {
boolean isPrime = true;
for(int j = 2;j*j<i;j++){
if(i%j==0){
isPrime = false;
break;
}
}
if(isPrime) {
System.out.println(i + "是质数");
}
}
}
}
}
ラベル5枚 ラベル(ラベル)
- 文法構造
レーベル名:ループストラクチャー
- 効果
将来使用できるようにコードにタグを追加します。通常はループ構造で使用され、break ステートメントと組み合わせて使用されます。
- アプリケーションシナリオ
import java.util.Scanner;
public class study {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
max_menu:while (true) {
System.out.println("=======================");
System.out.println("1.学生成绩管理");
System.out.println("2.学生选课管理");
System.out.println("3.退出系统");
System.out.println("=======================");
System.out.println("请选择菜单编号:");
int menuNo = sc.nextInt();
if (menuNo == 1) {
two_menu:while(true) {
System.out.println("----------------------");
System.out.println("1.添加成绩");
System.out.println("5.返回主菜单");
System.out.println("----------------------");
System.out.println("请选择编号:");
int menu2 = sc.nextInt();
switch (menu2){
case 1:
System.out.println("选择了添加成绩");
break;
case 5:
break two_menu;
}
}
}else if (menuNo == 2) {
} else {
System.out.println("退出咯");
break;
}
}
}
}
説明:
two_menu:while (true)
while ループには max_menu というラベルが付けられます
two_menu を中断します。
two_menu 全体に対応する while ループから抜け出す