案例演示
1.买飞机票
/**
* 计算飞机票价格
*/
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入机票价格:");
double price = scanner.nextDouble();
System.out.println("请输入仓位类型(头等舱、经济舱):");
String type =scanner.next();
// scanner.nextLine();
System.out.println("请输入乘机月份(数字):");
int month = scanner.nextInt();
sum(price,type,month);
}
//判断月份
public static void sum(double price,String type,int month){
if (4<month && month<11){
type(price,type,0.9,0.85);
}else if (month==11 || month==12 || (1<=month && month<=4)){
type(price,type,0.7,0.65);
}else {
System.out.println("月份输入错误!无法计算票价");
}
}
//舱类
public static void type(double price,String type,double a,double b){
switch (type){
case "头等舱":
price *= a;
break;
case "经济舱":
price *= b;
break;
default:
System.out.println("舱输入错误!无法计算票价");
break;
}
System.out.println("机票的价格是:"+price);
}
}
2.找素数
/**
* 找素数:
* 101-200间有多少素数,并输出所有素数;
* 素数:除了1和他本身为,不能被其他整数整除
*/
public class Test2 {
public static void main(String[] args) {
int[] arr = new int[50];
boolean flag = false;
int n=0;
for (int i = 101; i <201 ; i++) {
//是否是素数
flag=sushu(i);
if (flag){
//素数,加入数组
arr[n]=i;
n++;
}
}
System.out.println("101-200有素数:"+n+"个"+arr.length);
System.out.println(Arrays.toString(arr));
}
//判断素数素数
public static boolean sushu(int i){
for (int j = 2; j <i ; j++) {
if (i%j == 0){
//能整除,非素数
return false;
}
}
return true;
}
}
3.生成验证码
/**
* 5位验证码:
* 可能是数字、大小写字母
*/
public class Test3 {
public static void main(String[] args) {
String code = createCode(5);
System.out.println(code);
}
//生成n位验证码
public static String createCode(int n){
String code = "";
Random random = new Random();
for (int i = 0; i < n; i++) {
int type = random.nextInt(3);//0-2
//选验证码类型
switch (type){
case 0:
//大写字符 A65 Z65+26
char c = (char) (random.nextInt(26)+65);
code += c;
break;
case 1:
//小写字符 a97 z 97+26
char cc = (char) (random.nextInt(26)+97);
code += cc;
break;
case 2:
code += random.nextInt(10);
break;
}
}
return code;
}
}
4.数组复制
/**
* 复制数组:
* 数组元素赋值给新数组
*/
public class Test4 {
public static void main(String[] args) {
int[] arrOne = {10,20,30,40,50,66};
int[] arrTwo = new int[arrOne.length];
for (int i = 0; i < arrOne.length; i++) {
arrTwo[i] = arrOne[i];
}
System.out.println(Arrays.toString(arrTwo));
}
}
5.评委打分
/**
* 评委打分:
* 六位评分,去掉最高和最低,取平均
*/
public class Test5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入几位评委打分:");
int num = scanner.nextInt();
int[] users = new int[num];
for (int i = 0; i < num; i++) {
System.out.println("请输入第"+(i+1)+"位评委的评分(1-10分)");
users[i] = scanner.nextInt();
}
//评分从小到大
order(users,num);
//最终得分
avg(users,num);
}
//冒泡排序,评分从小到大整理
public static void order(int[] users,int num){
for (int i = 0; i < num-1; i++) {
for (int j = 0; j < num-i-1; j++) {
if (users[j]>users[j+1]){
int temp = users[j+1];
users[j+1] = users[j];
users[j] = temp;
}
}
}
System.out.println(Arrays.toString(users));
}
//取平均值
public static void avg(int[] users,int num){
double score = 0;
for (int i = 1; i < num-1 ; i++) {
score += users[i];
}
double avgScore = score/(num-2);
System.out.println("选手最终得分:"+avgScore);
}
}
6.数字加密
/**
* 数字加密规则:
* 得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)
*/
public class Test6 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一串正整数字:");
String num = scanner.next();
int length = num.length();
//快速获取int位数
//int length1 = String.valueOf(number).length();
int[] passOne = new int[length];
for (int i = 0; i < length; i++) {
//取字符num每位char字符,转为String,再转int
passOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
}
System.out.println(Arrays.toString(passOne));
//+5%10
for (int i = 0; i < length; i++) {
passOne[i] = (passOne[i]+5)%10;
}
System.out.println(Arrays.toString(passOne));
//取反
for (int i = 0,j=length-1; i < j; i++,j--) {
int temp = passOne[i];
passOne[i] = passOne[j];
passOne[j] = temp;
}
System.out.println(Arrays.toString(passOne));
}
}
6.1数字解密
/**
* 数字解密规则:
* 得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)
原0-4 加密后是5-9
原5-9 加密后是0-4
*/
public class Test7 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一串正整数字:");
String num = scanner.next();
int length = num.length();
int[] passOne = new int[length];
for (int i = 0; i < length; i++) {
//取字符num每位char字符,转为String,再转int
passOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
}
System.out.println(Arrays.toString(passOne));
//取反
for (int i = 0,j=length-1; i < j; i++,j--) {
int temp = passOne[i];
passOne[i] = passOne[j];
passOne[j] = temp;
}
System.out.println(Arrays.toString(passOne));
//解密:分析变化规则
for (int i = 0; i < length; i++) {
if (0<=passOne[i] && passOne[i]<5){
passOne[i] = passOne[i]+5;
}else {
passOne[i] = passOne[i]-5;
}
}
System.out.println(Arrays.toString(passOne));
}
}
7.Two球系统
/**
* 双色球系统:
* 投注号码由6个红球号码和1个篮球号码组成
* 红球号从1-33中选(不可重复);篮球号码从1-16中选
*/
public class Test8 {
public static void main(String[] args) {
int[] luckNumbers = createLuckNumbers();
int[] userNumbers = userInputNumbers();
judge(luckNumbers,userNumbers);
}
//生成中奖号码
public static int[] createLuckNumbers(){
Random random = new Random();
int[] luckNumbers = new int[7];
for (int i = 0; i < luckNumbers.length-1; i++) {
while (true){
int date = random.nextInt(33)+1;
boolean flag = true;
for (int j = 0; j <i ; j++) {
//出现重复值
if (luckNumbers[j] == date){
flag = false;
break;
}
}
//不重复的值加入
if (flag){
luckNumbers[i] = date;
break;//结束while
}
}
}
luckNumbers[luckNumbers.length-1] = random.nextInt(16)+1;
// System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));
return luckNumbers;
}
//用户输入号码
public static int[] userInputNumbers(){
Random random = new Random();
int[] userNumbers = new int[7];
Scanner scanner = new Scanner(System.in);
System.out.println("请输入双色球号码前六位(1-33),最后一位(1-16):");
while (true){
System.out.println("请输入第1位号码:");
int date = scanner.nextInt();
if (0<date && date<34){
userNumbers[0] = date;
break;
}else {
System.out.println("有误:请输入(1-33)的数字:");
}
}
for (int i = 1; i < userNumbers.length-1; i++) {
while(true){
System.out.println("请输入第"+(i+1)+"位号码:");
int date = scanner.nextInt();
if (0<date && date<34){
boolean flag = false;
for (int j = 0; j <i ; j++) {
//出现重复值
if (userNumbers[j] == date){
System.out.println("请不要输入重复数字:");
flag=true;
break;
}
}
if (flag){
continue;
}
}else {
System.out.println("请输入(1-33)的数字:");
continue;
}
//不重复的值加入
userNumbers[i] = date;
break;
}
}
while (true){
System.out.println("请输入第7位号码:");
int date = scanner.nextInt();
if (0<date && date<17){
userNumbers[userNumbers.length-1] = date;
break;
}else {
System.out.println("请输入(1-16)的数字:");
}
}
// System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));
return userNumbers;
}
//判断中奖情况
public static void judge(int[] luckNumbers,int[] userNumbers){
System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));
System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));
boolean blue = false;
if (luckNumbers[luckNumbers.length-1] == userNumbers[userNumbers.length-1]){
blue = true;
System.out.println("恭喜您命中了篮球");
}else {
System.out.println("很遗憾,您没有命中篮球");
}
int count = 0;
for (int i = 0; i < luckNumbers.length-1; i++) {
if (luckNumbers[i] == userNumbers[i]){
count++;
}
}
if (count>0){
System.out.println("恭喜您命中了"+count+"个红球");
}else {
System.out.println("很遗憾,您没有命中红球");
}
if (blue){
switch (count){
case 6:
System.out.println("恭喜中了1000万元");
break;
case 5:
System.out.println("恭喜中了3000元");
break;
case 4:
System.out.println("恭喜中了200元");
break;
case 3:
case 2:
System.out.println("恭喜中了10元");
break;
case 1:
System.out.println("恭喜中了5元");
break;
default:
System.out.println("很遗憾,没中奖");
break;
}
}else {
switch (count){
case 6:
System.out.println("恭喜中了500万元");
break;
case 5:
System.out.println("恭喜中了200元");
break;
case 4:
System.out.println("恭喜中了10元");
break;
default:
System.out.println("很遗憾,没中奖");
break;
}
}
}
}
RecordDate:2021/08/10
8.模拟ATM
package com.yanfeng.atm;
/**
* 账户类:
*/
public class Account {
private String cardId;
private String userName;
private String passWord;
private double money;
private double quotaMoney;
public Account() {
}
public Account(String cardId, String userName, String passWord, double money, double quotaMoney) {
this.cardId = cardId;
this.userName = userName;
this.passWord = passWord;
this.money = money;
this.quotaMoney = quotaMoney;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getQuotaMoney() {
return quotaMoney;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
}
package com.yanfeng.atm;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* ATM系统入口:
*/
public class ATMSystem {
public static void main(String[] args) {
ArrayList<Account> accounts = new ArrayList<>();
//Ctrl+Alt+T 快捷键选择循环或者异常处理
//展示系统首页
while (true) {
System.out.println("----风风ATM系统-----");
System.out.println("1.账户登录");
System.out.println("2.账户开户");
Scanner scanner = new Scanner(System.in);
System.out.println("请选择操作");
int command = scanner.nextInt();
switch (command){
case 1:
//登录
login(accounts,scanner);
break;
case 2:
register(accounts,scanner);
break;
default:
System.out.println("输入操作命令不存在!");
}
}
}
/**
* 用户登录
* @param accounts
* @param scanner
*/
private static void login(ArrayList<Account> accounts, Scanner scanner) {
System.out.println("===============系统登录界面======================");
if (accounts.size()==0){
System.out.println("当前系统中无账号,请开户后操作!");
System.out.println("");
return;//卫语言风格,结束方法执行
}
while (true) {
System.out.println("请输入账户号:");
String cardId = scanner.next();
Account account = getAccountByCardId(cardId, accounts);
if (account == null){
System.out.println("系统内无该账号信息,请检查后输入!");
}else {
while (true) {
System.out.println("请输入账户密码:");
String passWord = scanner.next();
if (account.getPassWord().equals(passWord)) {
System.out.println(account.getUserName()+"登录成功,卡号是:"+account.getCardId());
showUserCommand(accounts,scanner,account);
return;//结束登录
}else {
System.out.println("输入密码有误!");
}
}
}
}
}
/**
* 登录后操作页
* @param accounts
* @param scanner
* @param account
*/
private static void showUserCommand(ArrayList<Account> accounts, Scanner scanner, Account account) {
while (true) {
System.out.println("===============开户操作页======================");
System.out.println("1.查询账户");
System.out.println("2.存款");
System.out.println("3.取款");
System.out.println("4.转账");
System.out.println("5.修改密码");
System.out.println("6.退出");
System.out.println("7.注销账户");
System.out.println("请选择:");
int command = scanner.nextInt();
switch (command){
case 1:
showAcount(account);
break;
case 2:
//存款
depositMoney(scanner,account);
break;
case 3:
drawMoney(scanner,account);
break;
case 4:
//转账
transferMoney(accounts,scanner,account);
break;
case 5:
//修改密码
updatePassWord(scanner,account);
return;
case 6:
//退出
System.out.println("退出成功,欢迎下次光临");
return;//停止选择操作方法
case 7:
boolean flag = deleteAccount(accounts, scanner, account);
if (flag){
return;
}
break;
default:
System.out.println("输入操作命令不存在!");
break;
}
}
}
/**
* 销户
* @param accounts
* @param scanner
* @param account
*/
private static boolean deleteAccount(ArrayList<Account> accounts, Scanner scanner, Account account) {
//销户
System.out.println("确认要销户吗? Yes/No");
String rs = scanner.next();
switch (rs){
case "Yes":
if (account.getMoney()>0){
System.out.println("账户中还有余额,无法销户!");
}else {
accounts.remove(account);
System.out.println("您的账户已销户!");
return true;
}
break;
default:
System.out.println("当前账户继续保留");
break;
}
return false;
}
/**
* 修改密码
* @param scanner
* @param account
*/
private static void updatePassWord(Scanner scanner, Account account) {
System.out.println("===============用户修改密码界面======================");
while (true) {
System.out.println("输入原密码:");
String oldPassWord = scanner.next();
if (account.getPassWord().equals(oldPassWord)){
while (true) {
System.out.println("请输入新密码:");
String newPassWord = scanner.next();
System.out.println("请确认新密码:");
String okPassWord = scanner.next();
if (newPassWord.equals(okPassWord)){
//密码认证通过
account.setPassWord(newPassWord);
System.out.println("密码修改成功!");
return;
}else {
System.out.println("两次密码不一致,请重新录入密码");
}
}
}else {
System.out.println("原密码输入错误,请重试!");
}
}
}
/**
* 转账
* @param accounts
* @param scanner
* @param account
*/
private static void transferMoney(ArrayList<Account> accounts, Scanner scanner, Account account) {
System.out.println("=========转账操作页面========");
if (accounts.size()<2){
System.out.println("当前系统中,不足两个账号,不支持转账操作!");
System.out.println("");
return;//卫语言风格,结束方法执行
}
double money = account.getMoney();
if (money < 100){
System.out.println("账户不足100元,无法转账,先存钱吧!");
return;
}
while (true) {
System.out.println("请输入对方账户的卡号");
String cardId = scanner.next();
if (account.getCardId().equals(cardId)){
System.out.println("您不能给自己转账!");
continue;//放弃当次循环
}
//转账账户方transferaccount
Account transferaccount = getAccountByCardId(cardId,accounts);
if (transferaccount == null){
System.out.println("您输入账号不存在!");
System.out.println("");
}else {
String userName = transferaccount.getUserName();
String tip = "*"+userName.substring(1);
System.out.println("请输入["+tip+"]的姓氏");
String preName = scanner.next();
if (userName.startsWith(preName)){
//认证通过开始转账
while (true) {
System.out.println("请输入转账金额:");
double transferMoney = scanner.nextDouble();
if (transferMoney<=money){
account.setMoney(money-transferMoney);
//对方账户余额变动
transferaccount.setMoney(transferaccount.getMoney()+transferMoney);
System.out.println("向账户:"+cardId+"转账"+transferMoney+"成功");
showAcount(account);
return;
}else {
System.out.println("余额不足,最多可以转账:"+money);
}
}
}else {
System.out.println("验证信息有误!!");
}
}
}
}
/**
* 取款
* @param scanner
* @param account
*/
private static void drawMoney(Scanner scanner, Account account) {
System.out.println("=========取款操作页面========");
double money = account.getMoney();
if (money < 100){
System.out.println("账户不足100元,无法取钱,存一点吧");
return;
}
while (true) {
System.out.println("请输入取款金额:");
double drawMoney = scanner.nextDouble();
if (drawMoney<=account.getQuotaMoney()){
if (drawMoney<=account.getMoney()){
account.setMoney(account.getMoney()-drawMoney);
System.out.println("取款成功,当前账户信息如下");
showAcount(account);
return;
}else {
System.out.println("存款不够了!当前账户余额:"+account.getMoney());
}
}else {
System.out.println("取款超过每次限额,无法取款");
}
}
}
/**
* 存款
* @param scanner
* @param account
*/
private static void depositMoney(Scanner scanner, Account account) {
System.out.println("=========存款操作页面========");
System.out.println("请输入存款金额:");
double tempMoney = scanner.nextDouble();
//更新账号中余额,account中值更改,集合中也相应更改,里面存的是地址
account.setMoney(account.getMoney()+tempMoney);
System.out.println("存款成功,当前账户信息如下");
showAcount(account);
}
/**
* 展示当前账户信息
* @param account
*/
private static void showAcount(Account account) {
System.out.println("=========当前账号信息如下==================");
System.out.println("卡号:"+account.getCardId());
System.out.println("户主:"+account.getUserName());
System.out.println("余额:"+account.getMoney());
System.out.println("限额:"+account.getQuotaMoney());
}
/**
* 用户开户功能
* @param accounts 账户集合
* @param scanner
*/
private static void register(ArrayList<Account> accounts, Scanner scanner) {
System.out.println("===============系统开户操作======================");
Account account = new Account();
System.out.println("请输入账户用户名:");
String userName = scanner.next();
account.setUserName(userName);
while (true) {
System.out.println("请输入账户密码:");
String passWord = scanner.next();
System.out.println("请确认账户密码:");
String okPassWord = scanner.next();
if (passWord.equals(okPassWord)){
//密码认证通过
account.setPassWord(passWord);
break;
}else {
System.out.println("两次密码不一致,请重新录入密码");
}
}
System.out.println("请输入账户转账限额:");
double quotaMoney = scanner.nextDouble();
account.setQuotaMoney(quotaMoney);
//为账号随机生成8位不与其他账号重复密码
String cardId = getRandomCardId(accounts);
account.setCardId(cardId);
//账号添加到集合中
accounts.add(account);
System.out.println("恭喜您"+userName+"先生/女士,开户成功!您的卡号是:"+cardId+",请妥善保管卡号");
}
/**
* 为账号随机生成8位不与其他账号重复密码
* @return
* @param accounts
*/
private static String getRandomCardId(ArrayList<Account> accounts) {
Random random = new Random();
//死循环,直到可用账号出现
while (true) {
String cardId = "";
for (int i = 0; i < 8; i++) {
cardId += random.nextInt(10);
}
//判断卡号是否重复
Account account = getAccountByCardId(cardId, accounts);
if (account == null){
//无重复,账号可用
return cardId;
}
}
}
/**
* 判断卡号是否重复
* @param cardId
* @param accounts
*/
private static Account getAccountByCardId(String cardId, ArrayList<Account> accounts) {
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
if (account.getCardId().equals(cardId)){
return account;
}
}
return null;
}
}