Java基础:Day04
今日目标:
- 循环之break、continue
- 程序调试
- 多重循环
- 数组入门
1.break和contine
1.1break使用场景
①switch中:匹配到某个case时,跳出整个switch结构
②循环【1层】:跳出当前循环体,执行整个循环结构后面的语句
1.2continue
只能用于循环中,结束当次循环,即不执行当次循环,continue后面的语句,继续下一次循环
循环小结:
2.程序调试
要习惯使用调试功能
2.1为什么要使用
想跟踪代码的走向,同时你们后面在学习框架的源码时,通常也会使用程序调试去跟踪。
2.2如何用
2.2.1设置断点
2.2.2使用断点运行
2.2.3跟踪代码,观察变量的变化
3.多重循环
玩多重循环,就是玩规律
3.1为什么要用
需求:打印5行4列的*,怎么打印
发现使用单重循环也可以搞定,但是需要执行多次重复操作
前面说过:重复操作考虑使用循环,所以,此处我们应该使用双重循环
3.2有哪些组合
6种组合
练习:
1.打印n>=2行的等腰三角形*
*
***
2.打印直角三角形
*
**
***
3.倒序打印九九乘法表
4.输入n,就打印n行,且改行的长度为n个n
1
2 2
3 3 3
参考代码
4.数组
4.1为什么
4.2是什么
- 数组是内存中的一块连续存储空间
- 存放的是多个相同数据类型的值 ?几种数据类型【2种:基本+引用】
- 长度一旦定义,不能改变 》 想改变长度,怎么办?重新搞一个
- 使用下标/角标/索引,去操作数组中的元素
- 下标从 0 ,最大值为
- 数组元素有默认值
- 获取数组长度: 数组名.length
4.3怎么玩
4.3.1步骤
- 在内存中声明一个数组: int[] scores数组名;
- 为数组分配长度; scores=new int[3];
- 为数组元素赋值: scores[0] = 20;
4.3.2基本使用
1.初始化数组的两种方式
动态初始化: int[] scores2 = new int[3] ,适合事先不知道里面元素的值
静态初始化: int[] aa = {12,33}
2.遍历
3.最值
比武招亲:打擂台,每个上台的都认为自己最牛逼
4.标记思想
非常非常重要,参见远古时代,对犯人的做法!!!!!
附录
数组最常遇到的问题/异常:
作业
- 打印镂空的菱形,补全菱形的外边,就长方形中嵌套菱形,上半个菱形的行数从键盘输入
import java.util.Scanner;
public class HomeWork4 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("请输入上半区菱形的行数");
int n=input.nextInt();
for (int i = n; i >= 1; i--) { //菱形的上半部分
for (int j = 1; j <= 2*n-1; j++) {
if (i == j || j == 2*n - i) {
System.out.print("*");
} else if((i==n&&j<=2*n-1)||((j==1||j==2*n-1)&&i<=n)) {
System.out.print("#");
}else{
System.out.print(" ");
}
}
System.out.println();
}
for (int i = 2; i <= n; i++) { //菱形的下半部分
for (int j = 1; j <= 2*n-1; j++) {
if ((i == j || j == 2*n - i) ){
System.out.print("*");
} else if((i==n&&j<=2*n-1)||((j==1||j==2*n-1)&&i>=2)){
System.out.print("#");}
else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
2.实现10道 1-100 以内加减乘除求余数算术题,每题10分,操作符从 char[] chs = {'+','- ','*','/','%'} ,根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算总分数,以及答题耗时。根据分数和答题耗时,给出对应的考试等级
注意:1.限时5s,这个值自己定义;若在限时范围内,成绩在[90,100]给优秀;[80,90)给良好;
[60,80)给及格;不及格
2.若超过考试限时(0,2s],分数扣10分,扣完的分数若在上述值范围内,依然给出对应的成绩等 级;
3.若超过考试限时(2,3s],分数扣20分,扣完的分数若在上述值范围内,依然给出对应的成绩等 级;
4.若超过考试限时[5s,正无穷),分数扣50分,提示:“给你一辈子,估计都难能考及格”;
import java.util.Scanner;
public class HomeWork4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("==================答题开始=====================");
int correctTimes = 0;
char [] chs ={'+','-','*','/','%'};
int score = 0;
int answerTime = 0;
int count = 0;
double start= 0.0;
double end =0.0;
for (int i = 1; i < 11; i++) {
// 生成2个随机数
int num1 = (int)(Math.random()*101);
int num2 = (int)(Math.random()*101);
int num3 = (int)(Math.random()*5);
System.out.println("每道题有效时间5s,答对一题加10分,答错不扣分");
System.out.println(num1+""+chs[num3]+""+num2+"=?");
start = System.currentTimeMillis();//开始时间
int ans = 0;
switch (chs[num3]){
case '+':
ans = num1+num2;
break;
case '-':
ans = num1-num2;
break;
case '*':
ans = num1*num2;
break;
case '/':
ans = num1/num2;
break;
case '%':
ans = num1%num2;
break;
}
int result = input.nextInt();
end = System.currentTimeMillis();//结束时间
answerTime += (int)(end-start)/1000;
if(result == ans )
{
count++;
System.out.println("您一共回答正确了"+count+"题"+"总计用时"+answerTime+"秒");
score+=10;
}else{
System.out.println("回答错误");
}
}
if(answerTime-50>2){
score -=10;
}else if (answerTime-50>3){
score -=20;
}else if((answerTime-50)>5){
System.out.println("给你一辈子都难及格");
score -=50;
}
switch (score/10) {
case 10:
case 9:
System.out.println("成绩优异");
break;
case 8:
System.out.println("成绩良好");
break;
case 7:
case 6:
System.out.println("及格");
break;
default:
System.out.println("不及格");
break;
}
}
}
3.买双色球,规则(1-33红中选6不重复数字;1-16篮中选1) 大体流程:
- 号码是在范围之内:红[1,33],篮[1,16] —》预先存在数组中
- 投注,买家选择号码6红[放入到数组中]+1篮 int 》随机
1-33红色球中,如何随机取6个且不重复。计数器,随机出来一个,将这个值置为0【表示已 经取过了】
- 摇奖过程:6+1 红球数组+1篮球int --》手动输入
- 遍历红球数组,统计中奖的红球个数;篮球要么1个,要么0个
- 根据红蓝个数,去看中几等奖
import java.util.Scanner;
public class caipiao {
public static void main(String[] args) {
//生成双色球
//定义大小为7的数组存放6+1个双色球上的数字
int nums[] = new int[7];
//取6次随机数
int [] inputNumber = new int[7];
Scanner input = new Scanner(System.in);
//创建33个红球
int redBall[] = new int[33];
for (int i = 0; i < redBall.length; i++) {
redBall[i] = i+1;
}
for(int i=0;i<6;i++) {
// int redBall[] = new int[(int)(Math.random()*33+1)];
if(redBall[(int)(Math.random()*33+1)] !=0 ){
nums[i] = redBall[(int)(Math.random()*33)+1];
redBall[(int)(Math.random()*33)+1] = 0;
}else{
i--;
}
}
//生成蓝色球数字
nums[nums.length-1]=(int)(Math.random()*16+1);
int n;
System.out.println("请选择6个红球,范围在1-33之内,不得重复");
for (int i = 0; i < 7; i++) {
if( i<6){
n = input.nextInt();
inputNumber[i] = n;
}else{
System.out.println("请选择1个蓝球,范围在1-16之内");
n = input.nextInt();
inputNumber[i] = n;
}
}
System.out.println("开奖的红球号码为");
for (int i = 0; i < 7; i++) {
if( i<6){
System.out.print(nums[i]+" ");
}else{
System.out.println();
System.out.println("开奖的蓝球号码为");
System.out.print(nums[i]+" ");
System.out.println();
}
}
System.out.println("您选择的红球号码为");
for (int i = 0; i < 7; i++) {
if( i<6){
System.out.print(inputNumber[i]+" ");
}else{
System.out.println();
System.out.println("您选择的蓝球号码为");
System.out.print(inputNumber[i]+" ");
System.out.println();
}
}
int redcount =0;
int bluecount =0;
for (int i = 0; i < 6; i++) {
for (int j =0;j<6;j++){
if(inputNumber[i] == nums[j]){
redcount++;
}
}
}
if(inputNumber[6] == nums[6]) {
bluecount++;
}
if(bluecount == 1){
switch (redcount){
case 6:
System.out.println("恭喜你中了一等奖!");
break;
case 5:
System.out.println("恭喜你中了三等奖!");
break;
case 4:
System.out.println("恭喜你中了四等奖!");
break;
case 3:
System.out.println("恭喜你中了五等奖!");
break;
case 2:
case 1:
case 0:
System.out.println("恭喜你中了六等奖!");
break;
}
}else {
switch (redcount) {
case 6:
System.out.println("恭喜你中了二等奖!");
break;
case 5:
System.out.println("恭喜你中了四等奖!");
break;
case 4:
System.out.println("恭喜你中了五等奖!");
break;
case 3:
case 2:
case 1:
case 0:
System.out.println("谢谢参与");
break;
}
}
}
}