Java学习笔记 - 第004天
2016-12-01 本文已影响0人
迷茫o
分支结构
分支结构(选择结构) - switch 开关
case 不加 break 就会一直往下执行,default 不用(因为是最后一个)
x可以用整数、字符、枚举、字符串,只能做等值判断
switch (x)
例子
- 1. 输入1-12的数字代表月份 输出对应的英文单词
Scanner input = new Scanner(System.in);
System.out.print("请输入月份: ");
int month = input.nextInt();
String wordOfMonth;
// switch - 开关
// case 不加 break 就会一直往下执行,default 不用(因为是最后一个)
// 整数、字符、枚举、字符串 只能做等值判断
switch (month) {
case 1: wordOfMonth = "January"; break;
case 2: wordOfMonth = "February"; break;
case 3: wordOfMonth = "March"; break;
case 4: wordOfMonth = "April"; break;
case 5: wordOfMonth = "May"; break;
case 6: wordOfMonth = "June"; break;
case 7: wordOfMonth = "July"; break;
case 8: wordOfMonth = "August"; break;
case 9: wordOfMonth = "September"; break;
case 10: wordOfMonth = "October"; break;
case 11: wordOfMonth = "November"; break;
case 12: wordOfMonth = "December"; break;
default: wordOfMonth = "输出错误";
}
System.out.println(wordOfMonth);
input.close();
- 2. 自动问答机器人
Scanner input = new Scanner(System.in);
System.out.print("请输入: ");
String yourQuestion = input.nextLine();
String answer;
switch (yourQuestion) {
case "你好":
answer = "你好啊";
break;
case "今天天气怎么样":
answer = "你自己去看天气预报";
break;
case "操你大爷":
case "滚蛋":
answer = "请文明用语";
break;
default:
answer = "听不懂";
break;
}
System.out.println("计算机说: " + answer);
input.close();
练习
- 1.摇骰子决定惩罚方式
//random() - [0,1)
int face = (int) (Math.random() * 6 + 1);
System.out.println("摇出了 " + face + "点" );
String punishment = "";
switch (face) {
case 1:
punishment = "喝酒";
break;
case 2:
punishment = "唱歌";
break;
case 3:
punishment = "真心话";
break;
case 4:
punishment = "大冒险";
break;
case 5:
punishment = "脱衣服";
break;
case 6:
punishment = "给钱";
break;
/*
* 方法二:
* String punishment;
default:
punishment = "给钱";
break;
*/
}
System.out.println("你的惩罚是: " + punishment);
循环结构
while 循环
int i = 1;
while (i <= 10) {
System.out.println(i + ". Hello World!");
i += 1;
}
System.out.println("循环结束!");
do-while 循环
int i = 0;
do {
System.out.println(i + ". Hello World!");
i += 1;
} while (i < 10);
for 循环 ①; ②;③
①: 初始条件,只在第一次进循环执行一次,以后不会执行
②: 循环条件
③: 循环体最后一条语句,每循环一次执行一次
for (int i = 1; i <= 10; i++) {
System.out.println(i + ". Hello World!");
}
System.out.println("循环结束!");
例子
- 1.1-100求和
/* int sum = 0;
int i = 1;
while (i <= 100) {
if (i % 5 == 0 || i % 3 == 0 || i % 7 == 0) {
sum += i;
}
i += 1;
}*/
// while () ;
// while 管后面的 空语句 ;
/* int sum = 0;
int i = 1;
do {
sum += i;
i += 1;
} while (i<=100);
*/
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
练习
- 1.计算机出一个1~100随机数,猜计算机出的数是什么,猜大 提示 猜大了。。。。猜对了 提示 猜对了,猜错 7次 提示 智商捉急
int answer = (int) (Math.random() * 100 + 1);
int i = 0;
Scanner input = new Scanner(System.in);
while (true) {
System.out.print("猜下数字是多少: ");
int num = input.nextInt();
i += 1;
/* if (i == 7) {
System.out.println("你智商真捉急!");
}*/
if (num < answer) {
System.out.println("猜小了!");
}
else if (num > answer) {
System.out.println("猜大了!");
}
else {
System.out.println("猜对了!");
if (i <= 3) {
System.out.println("你真厉害!");
}
else if (i >= 7){
System.out.println("你智商真捉急!");
}
input.close();
break;
}
}
修正后代码:
Scanner input = new Scanner(System.in);
int answer = (int) (Math.random() * 100 + 1);
int thyAnswer;
int counter = 0;
do {
counter += 1;
System.out.print("请输入你猜的数字: ");
thyAnswer = input.nextInt();
if (thyAnswer > answer) {
System.out.println("小一点!");
}
else if (thyAnswer < answer) {
System.out.println("大一点!");
}
else {
System.out.println("恭喜你答对了! 你总共猜了" + counter + "次.");
}
} while (thyAnswer != answer);
if (counter > 7) {
System.out.println("智商捉急!!!");
}
input.close();
- 2.n! = n * (n - 1) * (n - 2) ··· 3 * 2 * 1
/* Scanner input =new Scanner(System.in);
System.out.print("请输入一个正整数: ");
int num = input.nextInt();
int result = 1;
for (int i = num; i >= 1; i--) {
result *= i;
}
System.out.println(num + "! = " + result);
input.close();*/
Scanner input = new Scanner(System.in);
System.out.print("n = ");
int n = input.nextInt();
if (n >= 0) {
double result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
System.out.println(n + "! = " + result);
}
else {
System.err.println("输入错误!");
}
input.close();
作业
- 1.把一颗骰子 摇6W次,统计每一面出现的次数
int face = 0;
int oneSum = 0;
int twoSum = 0;
int threeSum = 0;
int fourSum = 0;
int fiveSum = 0;
int sixSum = 0;
for (int i = 0; i < 60000; i++) {
face = (int) (Math.random() * 6 + 1);
switch (face) {
case 1:
oneSum += 1;
break;
case 2:
twoSum += 1;
break;
case 3:
threeSum += 1;
break;
case 4:
fourSum += 1;
break;
case 5:
fiveSum += 1;
break;
case 6:
sixSum += 1;
break;
}
}
System.out.printf("1 出现的次数: %d,\n2 出现的次数: %d,\n3 出现的次数: %d,\n"
+ "4 出现的次数: %d,\n5 出现的次数: %d,\n6 出现的次数: %d",oneSum,twoSum,threeSum,
fourSum,fiveSum,sixSum);
修正后代码:
int f1 = 0, f2 = 0, f3 = 0, f4 = 0, f5 = 0, f6 = 0;
// f1 = f2 = f3 = f4 = f5 = f6 = 0;
for (int i = 0; i < 60000; i++) {
int face = (int) (Math.random() * 6 + 1);
switch (face) {
case 1: f1 += 1; break;
case 2: f2 += 1; break;
case 3: f3 += 1; break;
case 4: f4 += 1; break;
case 5: f5 += 1; break;
case 6: f6 += 1; break;
}
}
System.out.println("1点摇出了 " + f1 + " 次");
System.out.println("2点摇出了 " + f2 + " 次");
System.out.println("3点摇出了 " + f3 + " 次");
System.out.println("4点摇出了 " + f4 + " 次");
System.out.println("5点摇出了 " + f5 + " 次");
System.out.println("6点摇出了 " + f6 + " 次");
- 2.找出100 ~ 999之间水仙花数 153 = 13+53+3^3
int bit = 0;
int ten = 0;
int hundreds = 0;
int sum;
for (int i = 100; i <= 999; i++) {
bit = i % 10;
ten = i / 10 % 10;
hundreds = i / 100 ;
sum = bit * bit * bit + ten * ten * ten + hundreds * hundreds * hundreds;
if (i == sum) {
System.out.println(i);
}
}
修正后代码:
for (int i = 100; i < 999; i++) {
int bw = i / 100;
int sw = i / 10 % 10;
int gw = i % 10;
if (i == bw * bw * bw + sw * sw * sw + gw * gw * gw) {
System.out.println(i);
}
}
- 3.输入两个正整数 求最大公约数和最小公倍数
Scanner input = new Scanner(System.in);
System.out.print("输入两个正整数: ");
int a = input.nextInt();
int b = input.nextInt();
int min = a < b ? a : b;
int max = a > b ? a : b;
int greatestCommonDivisor = 0;
int leastCommonMultiple = 0;
for (int i = min; i >= 1; i--) {
if (a % i == 0 && b % i == 0) {
greatestCommonDivisor = i;
break;
}
}
for (int i = max; i < a * b; i++) {
if (i % a == 0 && i % b == 0) {
leastCommonMultiple = i;
break;
}
}
System.out.println(a + "和" + b + "的最大公约数是:" +
greatestCommonDivisor + " ,最大公倍数是: " + leastCommonMultiple);
input.close();
修正后代码:
Scanner input = new Scanner(System.in);
System.out.print("请输入两个数: ");
int x = input.nextInt();
int y = input.nextInt();
for (int i = x < y ? x : y; i >= 1; i--) {
if (x % i == 0 && y % i == 0) {
System.out.println("最大公约数: " + i);
System.out.println("最小公倍数: " + x * y / i);
break; // 提前结束循环
}
}
input.close();
晚作业
- **1.Craps赌博游戏 - **
**两颗色子 - **
**第一次: **
玩家摇出 7 和11 玩家胜
2 3 或12 庄家胜
其他点数 游戏继续
玩家再摇
如果摇出7点 庄家胜
如果摇出了第一次的点数 玩家胜
其他情况 游戏继续
首次编写:
int dealerMoney = 1000;
int playerMoney = 1000;
int face1 = (int) (Math.random() * 6 + 1);
int face2 = (int) (Math.random() * 6 + 1);
int count = face1 + face2;
int time = 1;
boolean victory = true;
do {
System.out.printf("游戏开始: \n庄家的金钱 : %d 元,玩家的金钱 : %d 元\n",
dealerMoney,playerMoney);
System.out.println("第"+ time +"次摇出" + count +"点");
if (count == 7 || count == 11) {
victory = false;
System.out.println("玩家获胜!");
}
else if(count == 2 || count == 3 || count == 12) {
victory =false;
System.out.println("庄家获胜!");
}
else {
do {
face1 = (int) (Math.random() * 6 + 1);
face2 = (int) (Math.random() * 6 + 1);
int count2 = face1 + face2;
time += 1;
System.out.println("第"+ time +"次摇出" + count2 +"点");
if (count2 == 7) {
victory = false;
System.out.println("庄家获胜!");
}
else if (count2 == count) {
victory = false;
System.out.println("玩家获胜!");
}
} while (victory);
}
} while (victory);
第一次修改代码:
int dealerMoney = 1000;
int playerMoney = 1000;
boolean over = true;
System.out.printf("游戏开始: \n庄家的金钱 : %d 元,玩家的金钱 : %d 元\n",
dealerMoney,playerMoney);
do {
int face1 = (int) (Math.random() * 6 + 1);
int face2 = (int) (Math.random() * 6 + 1);
int count = face1 + face2;
int time = 1;
System.out.println("第"+ time +"次摇出" + count +"点");
if (count == 7 || count == 11) {
System.out.println("玩家获胜!");
playerMoney += 100;
dealerMoney -= 100;
}
else if(count == 2 || count == 3 || count == 12) {
System.out.println("庄家获胜!");
playerMoney -= 100;
dealerMoney += 100;
}
else {
boolean victory = true;
do {
face1 = (int) (Math.random() * 6 + 1);
face2 = (int) (Math.random() * 6 + 1);
int count2 = face1 + face2;
time += 1;
System.out.println("第"+ time +"次摇出" + count2 +"点");
if (count2 == 7) {
victory = false;
System.out.println("庄家获胜!");
playerMoney -= 100;
dealerMoney += 100;
}
else if (count2 == count) {
victory = false;
System.out.println("玩家获胜!");
playerMoney += 100;
dealerMoney -= 100;
}
} while (victory);
}
System.out.printf("\n游戏现在: \n庄家的金钱 : %d 元,玩家的金钱 : %d 元\n",
dealerMoney,playerMoney);
if(dealerMoney == 0 || playerMoney == 0){
over = false;
System.out.println("游戏结束");
}
} while (over);
第二次修改代码:
Scanner input = new Scanner(System.in);
int dealerMoney = 1000;
int playerMoney = 1000;
boolean over = true;
System.out.printf("游戏开始: \n庄家的金钱 : %d 元,玩家的金钱 : %d 元\n",
dealerMoney,playerMoney);
do {
int money;
do {
System.out.print("请下注: ");
int inMoney = input.nextInt();
if (playerMoney - inMoney > 0 && dealerMoney - inMoney > 0) {
money = inMoney;
}
else {
System.out.println("下注金额超出双方某一方的剩余金额!");
money = 0;
}
} while (money == 0);
int face1 = (int) (Math.random() * 6 + 1);
int face2 = (int) (Math.random() * 6 + 1);
int count = face1 + face2;
int time = 1;
System.out.println("第"+ time +"次摇出" + count +"点");
if (count == 7 || count == 11) {
System.out.println("玩家获胜!");
playerMoney += money;
dealerMoney -= money;
}
else if(count == 2 || count == 3 || count == 12) {
System.out.println("庄家获胜!");
playerMoney -= money;
dealerMoney += money;
}
else {
boolean victory = true;
do {
face1 = (int) (Math.random() * 6 + 1);
face2 = (int) (Math.random() * 6 + 1);
int count2 = face1 + face2;
time += 1;
System.out.println("第"+ time +"次摇出" + count2 +"点");
if (count2 == 7) {
victory = false;
System.out.println("庄家获胜!");
playerMoney -= money;
dealerMoney += money;
}
else if (count2 == count) {
victory = false;
System.out.println("玩家获胜!");
playerMoney += money;
dealerMoney -= money;
}
} while (victory);
}
System.out.printf("\n游戏现在: \n庄家的金钱 : %d 元,玩家的金钱 : %d 元\n",
dealerMoney,playerMoney);
if(dealerMoney == 0 || playerMoney == 0){
over = false;
System.out.println("游戏结束");
}
} while (over);
input.close();