目录
一、案例一:买飞机票
问题暴露1:
问题暴露2:
案例一总结:
二、案例二:找素数
三、案例三:开发验证码
四、数组元素复制
五、评委打分
案例六:数字加密
七、模拟双色球
7.1业务分析、随机生成一组中奖号码
暴露问题一:
暴露问题二:
思路提升一:
7.2用户输入一组双色号码
7.3判断中奖情况
一、案例一:买飞机票案例:
案例分析:
问题暴露1:对于输入的 *** 作指令掌握不熟练。
Scanner sc = new Scanner(System.in);
以及数据的接收代码的书写。
double money = sc.nextDouble();
int month = sc.nextInt();
String type = sc.next();
问题暴露2:
1、switch整体判断结构使用的不熟练。
switch(type){
case type1:
内容;
break;
case type2:
内容;
break;
......
default:
内容;
}
2、case后面不要忘记添加上break;
3、最后的判断分支要用default结束。
个人敲写代码:
public class Demotest1 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的机票原价:");
double money = sc.nextDouble();
System.out.println("请输入您的月份:");
int month = sc.nextInt();
System.out.println("请输入您的机票类型:");
String type = sc.next();
System.out.println("最终的票价:" + Getprice(money, month, type));
}
public static double Getprice(double money,int month,String type){
if(month>=5 && month<=10){
switch(type){
case "头等舱":
money *=0.9;
break;
case "经济舱":
money *=0.85;
break;
default:
System.out.println("您输入的仓位类型有误,请重新输入!");
money = -1;
}
}else if(month == 11 || month == 12 || month == 1 || month == 2){
switch(type){
case "头等舱":
money *=0.7;
break;
case "经济舱":
money *=0.65;
break;
default:
System.out.println("您输入的仓位类型有误,请重新输入!");
money = -1;
}
}else{
System.out.println("您输入的月份有误,请重新输入!");
money = -1;
}
return money;
}
}
结果:
参考代码:
案例一总结:
1、要合理的使用if和swith判断,根据他们的特点做好相应的使用。
2、if判断结构最好应用于值区间判断。也可用值匹配判断。
3、switch判断结构最好应用于只匹配判断。
二、案例二:找素数案例:
案例解析:
个人敲写:
public class Demotest2 {
public static void main(String[] args){
for (int i = 101; i <=200 ; i++) {
boolean flag = true;
for (int j = 2; j < i/2; j++) {
if(i%j ==0){
flag = false;
break;
}
}
if(flag){
System.out.println(i + "\t");
}
}
}
}
结果如下:
参考代码:
三、案例三:开发验证码案例:
案例分析:
暴露问题一:
1、对于随机数的使用遗忘。
随机数应该如下设定:
Random r = new Random;
int type = r.nextInt(3);//nextInt的类型可以有多种选用
暴露问题二:
强制类型转换:
获取随机字母的新思路:
思路获得:
利用随机数与强制类型转换,即可得到。
代码如下:
char ch1 = (char)(r.nextInt(26)+65);//获得大写字母随机数
char ch2 = (char)(r.nextInt(26)+97);//获得小写字母随机数
本案例部分的代码如下:
public class Demotest3 {
public static void main(String[] args){
System.out.println("验证码:" + CodeRandom(5));
}
public static String CodeRandom(int n){
String code = "";
Random r = new Random();
for (int i = 0; i < n; i++) {
int type = r.nextInt(3);
switch(type){
case 0://大写字母的随机数
char ch1 = (char)(r.nextInt(26)+65);
code += ch1;
break;
case 1://小写字母的随机数
char ch2 = (char)(r.nextInt(26)+97);
code += ch2;
break;
case 2://数字的随机数
int data = r.nextInt(10);
code +=data;
break;
}
}
return code;
}
}
结果如下:
参考代码如下:
四、数组元素复制案例:
案例分析:
数组复制错误代码展示:
以下的代码能够达到两个数组得到相同的数据,比如说查询arr2数组下的内容会展示arr1下的数组内容。
错误代码如下:没有实现数组的复制
public class Demotest4 {
public static void main(String[] args){
int[] arr1 = {11,22,33,44};
int[] arr2 = arr1;
}
}
暴露问题一“
对于元素的输出代码表示。
public static void PrintArray(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length-1?arr[i]:arr[i] + ",");
}
System.out.println("]");
}
代码输出如下:
public class Demotest4 {
public static void main(String[] args){
int[] arr1 = {11,22,33,44};
// int[] arr2 = arr1;
int[] arr2 = new int[arr1.length];
CopyArray(arr1,arr2);
PrintArray(arr1);
PrintArray(arr2);
}
public static void CopyArray(int[] arr1,int[] arr2){
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
}
public static void PrintArray(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length-1?arr[i]:arr[i] + ",");
}
System.out.println("]");
}
}
结果输出:
参考代码如下:
五、评委打分案例:
案例分析:
暴露问题一:
最高分与最低分的筛选代码书写,采用一个循环,两个判断。
代码如下:
for (int i = 0; i < scores.length; i++) {
if(max < scores[i]){
max = scores[i];
}
if(min > scores[i]){
min = scores[i];
}
}
整体代码的书写:
import java.util.Scanner;
public class Demotest5 {
public static void main(String[] args){
int[] scores = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i+1) +"位评委的分数:");
int score = sc.nextInt();
scores[i] = score;
}
int max = scores[0];
int min = scores[0];
double sum = 0.0;
for (int i = 0; i < scores.length; i++) {
if(max < scores[i]){
max = scores[i];
}
if(min > scores[i]){
min = scores[i];
}
sum +=scores[i];
}
System.out.println("评委中的最高分:" + max);
System.out.println("评委中的最低分:" + min);
double arravage = (sum-max-min)/(scores.length-2);
System.out.println("评委的平均分:" + arravage);
}
}
参考代码如下:
结果如下:
参考代码:
案例六:数字加密案例:
案例分析:
暴露问题一:
获取数据前后之间交换。中间涉及到了数据的位置变换代码。设置一个中间的数作为转换。如temp。
代码如下:
int temp = data[j];
data[j] = data[i];
data[i] = temp;
整体代码如下:
import jdk.swing.interop.SwingInterOpUtils;
import java.util.Scanner;
public class Demotest6 {
public static void main(String[] args){
//初始数据个数作为获得数据的长度,以及数据的内容获得
System.out.println("请输入参数的个数:");
Scanner sc =new Scanner(System.in);
int length = sc.nextInt();
int[] data = new int[length];
for (int i = 0; i < data.length; i++) {
System.out.println("请您输入第" + (i+1) + "个数");
data[i] =sc.nextInt();
}
System.out.println("初始数据结果:");
PrintArray(data);
//数据的初始处理
for (int i = 0; i < data.length; i++) {
data[i] = (data[i]+5)%10;
}
System.out.println("数据初始处理后结果:");
PrintArray(data);
//数据的反转,前后之间的反转
for (int i = 0, j = data.length-1; i < j; i++ ,j--) {
int temp = data[j];
data[j] = data[i];
data[i] = temp;
}
System.out.println("输出处理最终的结果:");
PrintArray(data);
}
//输出打印数组的方法
public static void PrintArray(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length-1?arr[i]:arr[i] + ",");
}
System.out.println("]");
}
}
参考代码如下:
七、模拟双色球 7.1业务分析、随机生成一组中奖号码案例:
案例分析:
暴露问题一:如果方法有数据值的返回,则需要在mian方法中定义对应返回数据类型的变量来接收。本案例是接收数组数据。
暴露问题二:数组的索引数值与for循环中i的值之间关系。本案例看该代码:数组的前六个数怎么设定。
思路提升一:使用标志位来避免随机数字的重复出现。本次案例中利用boolean flag = true;如果程序能够执行到 if(flag)此条语句时,就说明此时的flag为true,前面numbers数组中的数据没有重复的情况出现。然后再这个里面添加上break;来结束该死循环。
个人代码:
public class Demotest7 {
public static void main(String[] args){
//注意:数组返回的数据只是个地址,需要再次定义一个数组来进行接收方法生成的返回数据。一定要注意
int[] lucky = RandomArray();
System.out.println("输出的幸运数字:");
for (int i = 0; i < lucky.length; i++) {
System.out.print(lucky[i]+"\t");
}
}
public static int[] RandomArray (){
int[] numbers = new int[7];
Random r = new Random();
for (int i = 0; i < numbers.length-1; i++) {//i的判断时 7-1=6 ,此时i的取值为 0,1,2,3,4,5.也就是数组的前六个数据
//使用while死循环来避免随机出来的数字发生重复的情况
while(true){
int data1 = r.nextInt(33)+1;
boolean flag = true;
for (int j = 0; j < i; j++) {
if(numbers[i] == numbers[j]){//本人案例代码输入if(numbers[i] == numbers[j])
flag = false;
break;//使用break打破while死循环
}
}
//如果能够执行到该位置,则说明前面的数据没有出现重复的数据发生
if(flag){
numbers[i] = data1;//令改没有重复的数据放入到数组当中,成为新的数据加入。
break;//使用break打破while死循环
}
}
}
//第七个数据添加到数组当中
int data2 = r.nextInt(16)+1;
numbers[numbers.length-1] = data2;
//返回数组的地址
return numbers;
}
}
参考代码:
7.2用户输入一组双色号码//创建一个输出选中数字的方法
public static void PrintArray(int[] arr){
System.out.println("您选中的数字:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
//创建一个选中数字的方法,输入数字的方法。
public static int[] ScannerArray(){
Scanner sc = new Scanner(System.in);
int[] array = new int[7];
for (int i = 0; i
结果如下:
7.3判断中奖情况问题暴露一:
&的优先级比||优先级高。
优化:
在判断奖项位置也可以使用if分支语句进行判断代码如下:
import java.util.Random;
import java.util.Scanner;
public class Demotest7 {
public static void main(String[] args){
//注意:数组返回的数据只是个地址,需要再次定义一个数组来进行接收方法生成的返回数据。一定要注意
int[] lucky = RandomArray();
/*
System.out.println("输出的幸运数字:");
for (int i = 0; i < lucky.length; i++) {
System.out.print(lucky[i]+"\t");
}
System.out.println();
*/
int[] printarray = ScannerArray();
Judge(lucky,printarray);
}
public static void Judge(int[] lucky,int[] printarray ) {
System.out.println("您选中的数字:");
PrintArray(printarray);
System.out.println();
System.out.println("幸运数字:");
PrintArray(lucky);
System.out.println();
int readnumbers = 0;
int bluenumbers = 0;
for (int i = 0; i < lucky.length-1; i++) {
for (int j = 0; j < printarray.length-1; j++) {
if(lucky[i] == printarray[j]){
readnumbers ++;
break;
}
}
}
if(lucky[lucky.length-1] == printarray[printarray.length-1]){
bluenumbers = 1;
}else {
bluenumbers = 0;
}
switch(readnumbers*1+bluenumbers*100){
case 100:
System.out.println("恭喜您获得六等奖,中奖5元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 101:
System.out.println("恭喜您获得六等奖,中奖5元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 102:
System.out.println("恭喜您获得六等奖,中奖5元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 103:
System.out.println("恭喜您获得五等奖,中奖10元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 4:
System.out.println("恭喜您获得五等奖,中奖10元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 104:
System.out.println("恭喜您获得四等奖,中奖200元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 5:
System.out.println("恭喜您获得四等奖,中奖200元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 105:
System.out.println("恭喜您获得三等奖,中奖3000元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 6:
System.out.println("恭喜您获得二等奖,中奖500万元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
case 106:
System.out.println("恭喜您获得一等奖,中奖1000万元!");
System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
break;
default:
System.out.println("非常遗憾,您未中奖!");
}
}
public static void PrintArray(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
public static int[] ScannerArray(){
Scanner sc = new Scanner(System.in);
int[] array = new int[7];
for (int i = 0; i
结果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)