java学习之编程逻辑训练
案例1:买飞机票
分析
需要输入的变量:季节(旺季/淡季可以与后面的月份合并),舱位(经济舱/头等舱,字符串类型),机票原价(应该是浮点型),月份(整型)
定义方法录入机票原价,月份·,舱位类型
其中舱位类型是字符串类型,字符串类型用for语句或者if语句个人觉得不方便,于是选择switch…case…语句
该需求中方法目测需要返回值,返回值为折扣后的飞机票价格。
编程逻辑
- 1、先判断月份对应于淡季还是旺季;
- 2、再判断舱位情况,经济舱还是头等舱;
- 3、通过switch/case语句对票价进行计算;
- 4、最终输出票价。
package 编程思维训练;
import java.util.Scanner;
public class one {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入机票价格:");
double money = sc.nextDouble();
System.out.print("请输入购买机票月份:");
int month = sc.nextInt();
System.out.print("请输入舱位类型:");
String type = sc.next();
double money_finall = value(money,month,type);
System.out.print("最后的价格:"+money_finall);
}
public static double value(double money,int month,String type){
// 判断一个月份是淡季还是旺季
if(month >= 5 && month <= 10){
switch (type){
case "头等舱":
money = money * 0.9;
break;
case "经济舱":
money = money * 0.85;
}
}
else if((month >= 11 && month <= 12) || (month >=1 && month <=4)){
switch (type){
case "头等舱":
money = money*0.7;
break;
case "经济舱":
money = money*0.65;
break;
}
}else {
System.out.println("您输入的月份有错误");
money = -1;
}
return money;
}
}
结果
总结
案例2:找素数
分析
找出101–200之间所有的素数
输入一个数判断这个数是否是素数
找出101—200之间的素数比较容易相当用遍历,其难点在于输出如何输出所有元素?
代码
package 编程思维训练;
import java.util.Scanner;
public class two {
public static void main(String[] args) {
System.out.print("请输入一个数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
searchnums(num);
search();
}
public static void searchnums(int num) {
if (num > 1) {
boolean flage = true;
for (int k = 2; k < num / 2; k++) {
if(num % k==0){
// System.out.println("该" + num + "是素数");
flage = false;
break;
}
}
if(flage){
System.out.println("数"+num+"是素数。");
}else {
System.out.println("数"+num+"是素数。");
}
}else {
System.out.println("输入数据有误");
}
}
public static void search(){
System.out.println("101--200之间是素数为:");
for(int i=100;i<201;i++){
boolean f = true;
for(int j = 2;j<i /2;j++){
if(i % j == 0){
f = false;
break;
}
}
if(f){
System.out.print(i+";");
}
}
}
}
结果
总结
案例3:开发验证码
分析
随机产生一个5位验证码:数字,大写字母,小写字母,这里注意,验证码的个数是5,产生的类别是3种,但是java无法产生字母,所以需要用到字符强制转化,// 小写字符a:97 – z: 97+25。// 大写A:65–Z:65+25。
定义方法:方法传入的元素是num,即生成多少位验证码,返回值是验证码。
/*
* 生成验证码。
* */
package 编程思维训练;
import java.util.Random;
public class three {
public static void main(String[] args) {
String str = code(5);
System.out.println(str);
}
public static String code(int num){
String str = "";
Random r = new Random();
for(int i = 0;i < num;i++){
int type = r.nextInt(3); // 0:数字,1:大写,2:小写
switch (type){
case 0:
int k = r.nextInt(10);
str += k;
break;
case 1:
// 小写字符a:97 -- z: 97+25
char ch = (char) (r.nextInt(26)+97);
str += ch;
break;
case 2:
// 大写A:65--Z:65+25
char CH = (char) (r.nextInt(26)+65);
str += CH;
break;
}
}
return str;
}
}
结果
总结
案例4:数组元素的复制
分析
定义一个方法,遍历一个数组并把其数值赋给另一个数组。
方法调用:定义一个遍历数组的方法并再数组赋值的过程进行调用。
package 编程思维训练;
public class four {
public static void main(String[] args) {
int[] arr1 = {10,20,30,40,80,50};
int[] arr2 = new int[arr1.length];
copy(arr1,arr2);
}
public static void printarray(int[] arr){
System.out.print("[");
for(int i=0;i < arr.length;i++){
if(i == arr.length - 1){
System.out.print(arr[i]+"]");
}else {
System.out.print(arr[i]+";");
}
}
}
public static void copy(int[] arr,int[] arr2){
for (int i = 0;i < arr.length;i++){
arr2[i] = arr[i];
}
System.out.println("数组1内容:");
printarray(arr);
System.out.println();
System.out.println("数组2内容:");
printarray(arr2);
}
}
结果
案例5:评委打分
分析
1、评委打分,再真实情况下应该是double类型。
2、定义一个方法可以实时传递评委的打分并将其传入到数组中进行存储。
3、定义一个方法,求去除最高分和最低分后的平均分.
代码
package 编程思维训练;
import java.util.Scanner;
public class five {
public static void main(String[] args) {
double[] arr1 = new double[6];
System.out.println("请输入的分数:");
for(int i = 0;i< arr1.length;i++){
Scanner sc = new Scanner(System.in);
double num = sc.nextDouble();
arr1[i] = num;
}
System.out.println("您输入的分数为:");
System.out.print("[");
for (int j = 0;j<arr1.length;j++){
if(j == arr1.length -1){
System.out.println(arr1[j]+"]");
}else {
System.out.print(arr1[j] + ";");
}
}
score(arr1);
}
public static void score(double[] arr){
double max = arr[0];
double min = arr[0];
double sum = 0.0;
for(int i = 0;i< arr.length-1;i++){
if(arr[i] > max){
max = arr[i];
}else if((arr[i] < min)){
min = arr[i];
}
}
for (int i =0;i < arr.length;i++){
sum += arr[i];
}
double lastsum = (sum - max - min) / (arr.length - 2);
System.out.println("平均分为:");
System.out.println(lastsum);
}
}
总结
案例6:数字加密
分析
定义一个方法遍历数组,并输出。
按照流程对数组的元素进行运算,注意/与%的区别
代码
package 编程思维训练;
/*数字加密*/
public class six {
public static void main(String[] args) {
int [] arr = {4,7,8,5};
System.out.println("原数组:");
printarray(arr);
for(int i = 0;i < arr.length;i++){
arr[i] += 5;
}
System.out.println("+5后数组:");
printarray(arr);
for(int j=0;j<arr.length;j++){
arr[j] %= 10;
}
System.out.println("对10取余后数组:");
printarray(arr);
int j = arr.length - 1;
for (int k = 0;k<j;k++,j--){
int tem = 0;
tem = arr[k];
arr[k]= arr[j];
arr[j] =tem;
}
System.out.println("交换后的数组:");
printarray(arr);
}
public static void printarray(int[] arr){
System.out.print("[");
for(int i =0;i<arr.length;i++){
if (i == arr.length-1){
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+";");
}
}
}
}
结果
总结
案例7:数字解密
就是对案例6的结果进行解码成原来的数组
难点在于%如何去解码
考虑到是每位数字最大不会超过9,于是我选择解码过程中先加10,再对其取%,得出个位数。
代码
package 编程思维训练;
/*数字解密*/
public class seven {
public static void main(String[] args) {
int[] arr = {0,3,2,9};
int j = arr.length-1;
for (int k =0;k<j;k++,j--){
int tem= 0;
tem = arr[k];
arr[k] = arr[j];
arr[j] = tem;
}
for (int i = 0;i<arr.length;i++){
arr[i] += 10;
arr[i] -=5;
if(arr[i] > 10){
arr[i] %= 10;
}
}
printarray(arr);
}
public static void printarray(int[] arr){
System.out.print("[");
for(int i =0;i<arr.length;i++){
if (i == arr.length-1){
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+";");
}
}
}
}
结果
参考
黑马程序员