目录
流程控制
1.条件语句
2.switch多重选择语句
3.while循环
4.do/while循环
5.for循环
6.中断控制语句
数组
1.一维数组
2.多维数组
练习代码
1.双色球
2.五子棋
流程控制
1.条件语句
(1)条件语句几种格式:
if(条件语句){…}
if (条件语句){…}else{…}
if (条件语句){…}else if(条件语句){…}
if (条件语句){…}else if(条件语句){…}else{…}
下面展示一些 条件语句练习代码
。
package day02;
/** * if语句练习*/
import java.util.Scanner;
public class Demo1 { public static void main(String[] args) {
System.out.println("请输入考试成绩:");
Scanner input = new Scanner(System.in);
int s = input.nextInt();
/* if(s<60) {
System.out.println("你的成绩有待提高,加油把骚年");
}else{
System.out.println("成绩不错,继续努力!");
}*/
if(s<0 || s>120){
System.out.println("考试成绩不存在");
}else if(s>90){
System.out.println("成绩优秀,干的漂亮");
}else if(s>80){
System.out.println("成绩良好,继续保持");
}else if(s>70){
System.out.println("成绩合格,多加努力");
}else {
System.out.println("成绩不合格,寻找原因");
}
}
}
2.switch 多重选择语句 :
格式:
switch(表达式){
case 取值 1: 语句块 1;
break;
case 取值 n: 语句块 n;
break;
default: 语句块 n+1;
break;
}
下面展示一些 练习代码
。
package day02;
/** * switch语句练习*/
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
System.out.println("请输入一个月份(1-12月):");
Scanner input = new Scanner(System.in);
int text=input.nextInt();
switch (text) {
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;
default:
System.out.println("输入有误,请检查");
break;
}
}
}
3.while循环
符合条件,循环继续执行;否则,循环退出 特点:先判断,再执行
语法格式:while(条件表达式){
//语句块;
}
下面展示一些 练习代码小例子
。
例子:录入班级人数和学员成绩,计算班级学员的平均成绩
int sum = 0;
int score = 0;
int avg = 0;
int studentNum = 20;
while(i<=studentNum){
System.out.print("请输入第" + i + "位同学的成绩:");
score = input.nextInt(); sum = sum + score; i++;
}
avg = sum / stuNum ;
4.do/while循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
特点:先执行,再判断
语法格式:
do { 循环操作 }while ( 条件表达式);
下面展示一些 小例子
。
例子:首先计算退休账户中的余额,然后再询问是否打算退休:
do{
balance += payment;
double interest = balance * interestRate / 100;
balance += interest;Year++;
// print current balance// ask if ready to retire and get input
}while (input. equals ("N"));
只要用户回答“ N”,循环就重复执行。这是一个需要至少执行一次的循环,
因为用户必须先看到余额才能知道是否满足退休所用。
5.for循环
语法格式:for(初始化参数;判断条件 ;更新循环变量){ 循环体; }
下面展示一些 小例子
。
// A code block
var foo = 'bar';
例子:计算抽奖中奖的概率。如果必须从 1 ~ 50 之间的数字中取 6 个数字来抽奖,
那么会有 (50 x 49 x 48 x 47 x 46 x 45)/ (1 x 2 x 3 x 4 x 5 x 6) 种可能的结果,
所以中奖的几率是 1/15890700。
public class LotteryOdds {
public static void main(String口 args) {
Scanner in = new Scanner(System.in);
System,out.print("How many numbers do you need to draw? ");
int k = in.nextlnt();
System.out.print("What is the highest number you can draw? ");
int n = in.nextlnt();
int lotteryOdds = 1;
for (int i = 1; i <= k; i++){
lotteryOdds = lotteryOdds * (n - i + 1) /i;
System.out.println("Your odds are 1in " + lotteryOdds + Good luck!");
}
}
}
6.中断控制语句
break和continue
break:用于终止本轮所有次循环。
continue:用于终止本轮本次循环。
下面展示一些 例子
。
for( int i=0;i<10;i++){
If(i==5){
break;
}
System.out.println(i);//执行01234结束
}
for( int i=0;i<10;i++){
If(i==5){
continue;
}
System.out.println(i);//执行012346789结束
}
数组
常用格式 1. 数据类型[] 数组名称 = new 数据类型[数组长度];
常用格式 2. 数据类型[] 数组名称 = {数组内容 1,数组内容 2,…数组内容 n};
数组下标int[] arr = new int[10];
arr[5] = 123;
System.out.println(arr[5]);
要想获得数组中的元素个数,可以使用 array.length。
例如,for (int i = 0; i < a.length; i ++)System.out.println(arr[i]);
数组常用算法:冒泡排序和二分查找: 例子
。
package day;
public class Demo2 {
public static void main(String[] args) {
//排序并查找
int [] nums = {1,3,9,5,6,7,15,4,8};//创建数组
int temp;//创建临时变量方便调换
//外层循环控制比较的轮数,次数为length-1
for (int i=0;i<nums.length-1;i++) {
//内层循环控制的是每轮比较的次数,第i轮,i从0开始计算
for(int j=0;j<nums.length-i-1;j++) {
if(nums[j]>nums[j+1]) { //两两比较,满足移动条件
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
for (int i=0;i<nums.length;i++) {
System.out.println(nums[i]);
}
int num = 6;//要查找的数据
int minIndex = 0;//最小下标
int maxIndex= nums.length-1;//最大下标
int centerIndex = (minIndex+maxIndex/2);//中间下标
while(true) {
if(nums[centerIndex]>num) { //中间数据较大
maxIndex = centerIndex-1;
}else if(nums[centerIndex]<num) { //中间数据较小
minIndex = centerIndex+1;
}else {
//找到了数据
break;
}
if(minIndex>maxIndex) {
centerIndex = -1;
break;
}
centerIndex = (minIndex+maxIndex/2);//边界发生变化时更新下标
}
System.out.println("位置"+centerIndex);
}
}
下面展示一个 数组运用小例子
。
// A code block
var foo = 'bar';
package day;
/** * 班级里所有人有个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数)
, * 凡报到3的人退出圈子,问最后留下的当选为班长,问班长是原来第几号的那位。
* @author jade * */
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入班级总人数:");
int num = input.nextInt();
Boolean [] arr = new Boolean [num];//创建一个班级人数的数组
for (int i = 0; i < arr.length; i++) {
arr[i] = true;} // 遍历数组,第一次所有人都在圈内
//报数
int leftCount = num;
int countNum = 0;//计数值
int index = 0;//下标
while (leftCount > 1) {
if (arr[index] == true) {
countNum++;//假设有10个人,第一轮第1,2,4,5,7,8,10为true,
if (countNum == 3) {
countNum = 0;
arr[index] = false;//报到3,6,9时退出圈子,第2轮2,7退出圈子,类推
leftCount--;//总人数第一轮减3;
}
}
index++;
if (index == num) {
index = 0;
}
}
for (int i = 0; i < num; i++) {
if (arr[i] == true) {
System.out.println("班长是原来排在第" + (i + 1) + "位的那个。");
}
}
}
}
总结练习小代码
1.双色球
双色球代码编写笔记:
任务描述: 双色球投注区分为红球号码区和蓝球号码区,红球号码范围为01~33,
蓝球号码范围为01~16。双色球每期从33个红球中开出6个号码(不能重复),
从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限。
用户输入红球和蓝球号码,程序输出该用户中几等奖。
程序思路:定义数组存放红球和蓝球号码范围,然后使用random生成随机0到32的下标,产生6个不重复随机数并将系统随机生成的6个数据放在数组中与用户输入的进行对比,满足中奖条件则输出。代码
。
package game;
import java.util.Arrays;import java.util.
Random;import java.util.Scanner;
/** * 双色球投注区分为红球号码区和蓝球号码区,红球号码范围为01~33,
* 蓝球号码范围为01~16。双色球每期从33个红球中开出6个号码(不能重复),
* 从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码
* 和1个蓝球号码,顺序不限。
* 用户输入红球和蓝球号码,程序输出该用户中几等奖。
* * @author jade */
public class Doublecoloarball {
public static void main(String[] args) {
int [] redArr = {1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,31,32,33};//数组存放红球1-33的号码
int [] redBall = new int[6];//定义数组存放系统随机生成的红球
int []userRedBall = new int[6];//定义数组存放用户键盘输入的红球
Random random = new Random();
for (int i=0;i<redBall.length;i++) {
//生成随机0到32的下标,产生6个不重复随机数
int index = 0;
while(true) {
index = random.nextInt(33); //返回一个0-32之间的一个随机数
if(redArr[index]!=-1) { //根据产生随机数(数组下标)取出对应的值
redBall[i] = redArr[index];
redArr[index] = -1;
break;
}
}
}
//用户输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要打的红色球号码(1-33选,不能重复,选6次):");
for(int i=0;i<userRedBall.length;i++) {
userRedBall[i] = sc.nextInt();//捕获用户键盘输入的数组
}
int BlueBall = 0;//定义一个变量,存放系统随机生成的蓝色球
int userBlueBall = 0;//定义一个变量,存放用户键盘输入的蓝色球
BlueBall = random.nextInt(16)+1; //获取蓝色球数
System.out.println("请输入你要打的蓝色球号码,1-16之间选,选1次");
userBlueBall = sc.nextInt();
//用户输入的数与随机数相比,判断是否中奖
int redCount = 0 ;//存放正确的红球数
for(int i=0;i<redBall.length;i++) {
for(int j=0;j<userRedBall.length;j++) {
if(redBall[i]==userRedBall[j]) {
redCount++;
}
}
}
int blueCount = 0 ;//存放正确的蓝球数
if(BlueBall==userBlueBall) {
blueCount++;
}
//中奖条件
if(blueCount==0 && redCount <= 3){
System.out.println("抱歉,您没有中奖!");
}else if(blueCount==1 && redCount<3){
System.out.println("恭喜你中了六等奖,5块钱!");
}else if((blueCount==1 && redCount==3) || (blueCount==0 && redCount==4)){
System.out.println("恭喜你中了五等奖,10块钱!");
}else if((blueCount==1 && redCount==4) || (blueCount==0 && redCount==5)){
System.out.println("恭喜你中了四等奖,200块钱!");
}else if(blueCount==1 && redCount==5){
System.out.println("恭喜你中了三等奖,3000块钱!");
}else if(blueCount==0 && redCount==6){
System.out.println("恭喜你中了二等奖,500w!");
}else if(blueCount==1 && redCount==6){
System.out.println("恭喜你中了一等奖,1000w!");
}else{
System.out.println("系统有误,中奖无效!");
}
System.out.println("本期开奖红球号码:" + Arrays.toString(redBall) + "蓝球号码" + BlueBall);
System.out.println("用户选择红球号码:" + Arrays.toString(userRedBall) + "蓝球号码" + userBlueBall);
}
}
2.五子棋
目标: 编程实现控制台版并支持两人对战的五子棋游戏
(1)绘制棋盘
(2)提示黑方(用 1 表示)和白方(用 2 表示)
分别下棋(X,Y 轴位置)并重新绘制棋盘。
(3)每当一方下棋后判断是否获胜 。
(4)提示:采用二维数组来模拟棋盘。
程序思路:(1)绘制棋盘:首先绘制棋盘采用二维数组创建一个16*16的二维数组int[][] checkerboard = new int [16][16];将首行首列遍历一遍覆盖0输出0-15打印棋盘。
(2) 下棋:创建一个布尔量作为判定条件,首先黑方回合:用户输入x,y坐标并将该坐标原来的0覆盖成1代表黑方棋子,并重新输出棋盘,当每一次下子完毕后,判断是否获胜,当获胜时即输出某方获胜结束游戏。
(3) 判断获胜情况:四种获胜情况即横竖左斜和右斜
代码
。
package game;
import java.util.Scanner;
public class Gobang {
public static void main(String[] args) {
//绘制棋盘
int[][] checkerboard = new int [16][16];
for(int i=0;i<checkerboard .length;i++) {
checkerboard [0][i] = i;
checkerboard [i][0] = i;
}
//提示黑方(用 1 表示)和白方(用 2 表示)分别下棋(X,Y 轴位置)并重新绘制棋盘。
Scanner input = new Scanner(System.in);
Show(checkerboard);
boolean flag = true;
int x;
int y;
while(true) {
do {
System.out.println("请输入黑方落子位置例如(4 3):");
x = input.nextInt();
y = input.nextInt();
}
while(!IsEmpty(checkerboard,x,y));
checkerboard[x][y] = 1;
Show(checkerboard);
if(!Win(checkerboard)) {
break;
}
do {
System.out.println("请输入白方落子位置例如(4 3):");
x = input.nextInt();
y = input.nextInt();
}
while(!IsEmpty(checkerboard,x,y));
checkerboard[x][y] = 2;
Show(checkerboard);
if(!Win(checkerboard)) {
break;
}
}
}
//显示棋盘
public static void Show(int[][] checkerboard) {
for(int i=0;i<16;i++) {
for(int j=0;j<16; j++) {
if((i==0 && j>9) || (j==0 && i>9)) {
System.out.print(checkerboard[i][j]+"");
}else {
System.out.print(checkerboard[i][j]+" ");
}
}
System.out.println();
}
}
//判断黑白双方是否获胜//四种情况横竖左斜右斜
public static boolean Win(int[][] checkerboard) {
for(int i=1; i<16; i++) {
for(int j=1;j<16;j++) {
if(checkerboard[i][j]==1){
if((checkerboard[i][j+1]==1 &&checkerboard[i][j+2]==1 &&
checkerboard[i][j+3]==1 && checkerboard[i][j+4]==1) //判断横
||(checkerboard[i+1][j]==1 &&checkerboard[i+2][j]==1 &&
checkerboard[i+3][j]==1 && checkerboard[i+4][j]==1) //判断竖
||(checkerboard[i+1][j+1]==1checkerboard[i+2][j+2]==1 &&
checkerboard[i+3][j+3]==1 && checkerboard[i+4][j+4]==1)// 判断\斜;
||(checkerboard[i-1][j+1]==1 &&checkerboard[i-2][j+2]==1 &&
checkerboard[i-3][j+3]==1 && checkerboard[i-4][j+4]==1)){ // 判断/斜;
System.out.println("黑子获胜");
return false;
}
}else if(checkerboard[i][j]==2){
if((checkerboard[i][j+1]==2&&checkerboard[i][j+2]==2 &&
checkerboard[i][j+3]==2 && checkerboard[i][j+4]==2) ||
(checkerboard[i+1][j]==2 && checkerboard[i+2][j]==2 &&
checkerboard[i+3][j]==2 && checkerboard[i+4][j]==2) ||
(checkerboard[i+1][j+1]==2 && checkerboard[i+2][j+2]==2 &&
checkerboard[i+3][j+3]==2&&checkerboard[i+4][j+4]==2||
(checkerboard[i-1][j+1]==1 && checkerboard[i-2][j+2]==1 &&
checkerboard[i-3][j+3]==1 && checkerboard[i-4][j+4]==1)){
System.out.println("白子获胜");
return false;
}
}
}
}
return true;
}
//判断此位置是否已有棋子
public static boolean IsEmpty(int[][]checkerboard, int x, int y) {
if(checkerboard[x][y]==0) {
return true;
}
System.out.println("此位置已有棋子,请重新输入");
return false;
}
}