CH2-Java编程基础(7个案例实现)

2023-10-26

【案例2-1】 库房出入货物程序设计

【案例介绍】

  1. 任务描述

​ 现要对华为和小米两种手机产品进行入库,本案例要求编写一个模拟商品入库的程序,可以在控制台输入入库商品的数量,最后打印出仓库中所有商品详细信息以及所有商品的总库存数和库存商品总金额。

商品信息如下:

  • 品牌型号

  • 尺寸

  • 价格

  • 配置

  • 库存

  • 总价

  1. 运行结果

手机屏幕截图  描述已自动生成

图2-1 运行结果

【案例目标】

  • 学会分析”库房出入货物”任务实现的逻辑思路。

  • 能够独立完成”库房出入货物”程序的源代码编写、编译以及运行。

  • 能够在程序中使用算术运算符进行运算操作。

  • 能够在程序中使用赋值运算符进行赋值操作。

  • 掌握Java中的变量和运算符的知识点。

【案例思路】

​ (1) 查看运行结果后,可以将该程序分为3部分实现(商品入库、库存清单、总库存数与库存商品总金额)

​ (2) 商品入库是变化的数据,需要记录商品信息后打印,通过运行结果,我们可以分析出如下属性。

​ 品牌型号:商品的名称,String类型。

​ 尺寸:手机的大小,double类型。

​ 价格:手机的单价,double类型。

​ 配置:手机的内存等配置,String类型。

​ 库存数:此项数据为用户输入的数据,用户输入需要使用Scanner类,以下代码使用户能够从System.in中读取一个数字。

Scanner sc1 = new Scanner(System.in);

int Count=sc1.nextInt();

​ 总价:经过计算后打印,可以设置单独的变量,double类型。

​ (3) 库存清单中又包含了3部分,顶部为固定的数据,直接打印;中部为变化的数据,与商品入库的数据一致,打印出所有商品的详情,底部也为固定样式,直接打印即可。

​ (4) 总库存数与库存商品总金额是统计操作,需经过计算后打印,可以设置两个单独的变量:所有商品的库存总数:int类型。

​ 库存商品总金额:double类型。

【案例实现】

文件2-1 access.java

package chapter0201;
import java.util.Scanner;
public class access {
  public static void  main (String[] args) {
     /*
	 *现在有两款手机华为与小米需要做入库处理,我们需要编写一个程序来实现商品的入库,
      *入库完成后,打印入库商品的详细信息并计算出入库商品的数量与入库商品总金额。
	 */
	      //华为手机
	  String  huaweiBrand ="华为";
	  double huaweiSize=5.5;
	  double huaweiPrice=3688.88;
	  String  huaweiConfig="8+128g 全面刘海屏";
	  //小米手机
	  String  xiaomiBrand ="小米";
	  double xiaomiSize=5.0;
	  double xiaomiPrice=2988.88;
	  String  xiaomiConfig="4+64g 全面屏";
	  //华为手机入库
	  System.out.println("品牌型号:"+huaweiBrand);
	  System.out.println("尺寸:"+huaweiSize);
	  System.out.println("价格:"+huaweiPrice);
	  System.out.println("配置:"+huaweiConfig);
	  Scanner sc1 = new Scanner(System.in); 
	  System.out.println("请输入"+huaweiBrand+"手机的库存");
	  int huanweiCount=sc1.nextInt();
	  double huaweiTotal=huanweiCount*huaweiPrice;
	  System.out.println("库存"+huaweiBrand+"手机的总金
                              额:"+huaweiTotal);
	 //小米手机入库
	  System.out.println("品牌型号:"+xiaomiBrand);
	  System.out.println("尺寸:"+xiaomiSize);
	  System.out.println("价格:"+xiaomiPrice);
	  System.out.println("配置:"+xiaomiConfig);
	  System.out.println("请输入"+xiaomiBrand+"手机的库存");
	  int xiaomiCount=sc1.nextInt();
	  double xiaomiTotal=xiaomiCount*xiaomiPrice;
	  System.out.println("库存"+xiaomiBrand+"手机的总金额:
                              "+xiaomiTotal);
      //库存清单
	  System.out.println("------------库存清单------------");
	  System.out.println("品牌型号   尺寸   价格            配置       库存数
                              量   总价");
	  System.out.println(huaweiBrand+"       "+huaweiSize+"   
       "+huaweiPrice+"  "+huaweiConfig+"      "+huanweiCount+"       
       "+huaweiTotal);
	  System.out.println(xiaomiBrand+"       "+xiaomiSize+"     
       "+xiaomiPrice+"      "+xiaomiConfig+"       "+xiaomiCount+"       
       "+xiaomiTotal);
	  System.out.println("---------------------------------");
	  int total=huanweiCount+xiaomiCount;
	  double totalMoney=huaweiTotal+xiaomiTotal;
       //总库存数量与库存总价
	  System.out.println("总库存:"+total);
	  System.out.println("库存总价:"+totalMoney+"¥");  
  }
}
	第`10~18`行代码记录了清单中2种商品的详细信息,包括品牌型号、尺寸、价格、配置和库存数;

​ 第20~39行代码是商品入库的代码,先打印商品的详细信息,用户在输入入库的数量,计算出总价,最后打印即可。

​ 第41~52行代码用于打印所有商品的信息,需要注意的是,此处商品信息应该与列表顶部的商品信息的顺序一致,否则会造成商品信息显示错乱;

​ 第50~55行显示的是清单底部信息,包括总库存数与库存商品的总金额,它们都需要通过计算获得。

【案例2-2】 小明都可以买什么

【案例介绍】

  1. 任务描述

​ 编写一个智能购物计算小程序,在一家商店有书本、铅笔、橡皮、可乐、零食五种商品,商品价格如下表所示。

商品名称 价格
书本 12元
铅笔 1元
橡皮 2元
可乐 3元
零食 5元

​ 假如你带了20元,且必须购买一本书,剩余的钱还可以购买哪种商品,可以购买几件,购买完后又能剩余多少钱?

  1. 运行结果

​ 任务运行结果如图2-2所示。

手机屏幕截图  描述已自动生成

​ 图2-2 运行结果

【案例目标】

  • 学会分析"智能购物"程序的实现思路

  • 根据思路独立完成”智能购物”的源代码编写、编译及运行。

  • 掌握在程序中使用switch条件语句进行运算操作。

【案例思路】

​ (1) 从任务描述中可知,要实现此功能,我们需要先定义5种商品,定义五个int值作为这五种商品的价格。

​ (2) 从运行结果可知,我们需要先打印各个商品的价格以及带了多少钱,并选择需要购买商品的序列号。

​ (3) 选择到序列号后,我们需要使用switch条件语句进行判断用户要购买那件商品,并在switch条件语句中,计算可以购买多少其他商品和剩余多少钱。

【案例实现】

​ 智能购物的实现代码,如文件2-2所示。

文件2-2 shopping.java

package chapter0202;
import java.util.Scanner;
public class shopping {
	  public static void  main (String[] args) {
		  /*
		   * 假如你有20元,至少需要购买1本书,剩余的钱还可以购买那些东西。
		   */
		  int pencil=1;   //铅笔价格
		  int rubber=2;   //橡皮价格
		  int cola=3;     //可乐价格
		  int book=12;    //书本价格
		  int snacks=5;   //零食价格
		  System.out.println("书本的价格为"+book+"元,您总共有20元");
		  System.out.println("1.铅笔的价格为:"+pencil+"元");
		  System.out.println("2.橡皮的价格为:"+rubber+"元");
		  System.out.println("3.可乐的价格为:"+cola+"元");
		  System.out.println("4.零食的价格为:"+snacks+"元");
		  Scanner sc1 = new Scanner(System.in);
		  System.out.println("请输入其他需要购买商品的序列号:");
		  int id=sc1.nextInt();
		  switch (id){
		  case 1:
			  int pencilmoney=20-book;
			  int pencilsum=pencilmoney/pencil;
			  int pencilsurplus=pencilmoney%pencil;
			  System.out.println("购买完书本后还可以购买铅笔"+pencilsum+"
                                        个,还剩"+pencilsurplus+"元");
			  break;
		  case 2:
			  int rubbermoney=20-book;
			  int rubbersum=rubbermoney/rubber;
			  int rubbersurplus=rubbermoney%rubber;
			  System.out.println("购买完书本后还可以购买橡皮"+rubbersum+"
                                        个,还剩"+rubbersurplus+"元");
			  break;
		  case 3:
			  int colamoney=20-book;
			  int colasum=colamoney/cola;
			  int colasurplus=colamoney%cola;
			 System.out.println("购买完书本后还可以购买可乐"+colasum+"个,
                                        还剩"+colasurplus+"元");
			  break;
		  case 4:
			  int snacksmoney=20-book;
			  int snackssum=snacksmoney/snacks;
			  int snackssurplus=snacksmoney%snacks;
			  System.out.println("购买完书本后还可以购买零食"+snackssum+"
                                        个,还剩"+snackssurplus+"元");
			  break;
		  default:
			  System.out.println("您的输入有误。");
			  break;
		  }
		  
	  }
}

​ 第8~12行代码定义了5个商品的价格,第12~17行代码打印了商品的价格,第18~20行代码是让用户输入需要购买的商品序号,第21~53行代码使用了switch条件选择判断用户购买的那中商品,再在switch中计算可以购买多少个以及剩余多少钱。

【实验2-3】 超市购物小程序

【任务介绍】

  1. 任务描述

​ 编写一个超市购物程序,在一家超市有牙刷、毛巾、水杯、苹果和香蕉五种商品,商品价格如下表所示。

编号 商品名称 价格
1 牙刷 8.8元
2 毛巾 10.0元
3 水杯 18.8元
4 苹果 12.5元
5 香蕉 15.5元

​ 用户输入商品序列号进行商品购买,用户输入购买数量后计算出所需要花费的钱,一次购买结束后,需要用户输入“Y”或“N”,“Y”代表继续购买,“N”代表购物结束。

  1. 运行结果

任务运行结果如图2-1所示。

img

图2-1 运行结果

【任务目标】

  • 学会分析” 超市购物 ”程序的实现思路。

  • 根据思路独立完成” 超市购物 ”的源代码编写、编译及运行。

  • 掌握在程序中使用while循环结构和switch循环结构语句进行运算操作。

【实现思路】

​ (1) 从运行结果可以看出,我们需要先定义5个商品的价格,double类型,再打印出5种商品的价格。

​ (2) 从运行结果可以看出,这里我们让用户填写购买商品的序列号以及购买的数量,需要使用到Scanner类,

​ (3) 从运行结果可以看出,我们循环了选择购买的条件语句,这里使用while嵌套switch语句可以达到我们的目的,我们需要使用while循环switch的选择结构,而switch是判断用户选择购买商品序列号的条件语句。

【实现代码】

	超市购物程序的实现代码,如文件2-3所示。

文件2-3 supermarket.java

package chapter0203;
import java.util.Scanner;
public class supermarket {
	/*
	 * 模拟商城购物小系统:1.用户选择商品后,后台计算商品价格;
	 *                     2.使用while循环实现用户多次购买商品。
	 */
	  public static void  main (String[] args) {
		       double toothbrush=8.8;   //牙刷价格
		  double towel=10.0;        //毛巾价格
		  double cup=18.8; 		    //水杯价格
		  double apple=12.5;        //苹果价格
		  double banana=15.5;       //香蕉价格
		  int i=0;
		  String a="Y";
		  System.out.println("-------------黑马小商城-------------");
		  System.out.println("1.牙刷的价格为:"+toothbrush+"元");
		  System.out.println("2.毛巾的价格为:"+towel+"元");
		  System.out.println("3.水杯的价格为:"+cup+"元");
		  System.out.println("4.苹果的价格为:"+apple+"元");
		  System.out.println("5.香蕉的价格为:"+banana+"元");
		  while(a.equals("Y")) {
			  Scanner sc1 = new Scanner(System.in); 
			  System.out.println("请输入你需要购买商品的序列号:");
			  i=sc1.nextInt();
			  switch(i){
			  case 1:
				  System.out.println("请输入你需要购买牙刷的数量:");
				  int toothbrushnnumber=sc1.nextInt();
				  double toothbrushnnum=toothbrushnnumber*toothbrush;
				  System.out.println("你购买了牙刷"+toothbrushnnumber+"
                                          支,需要花费"+toothbrushnnum+"元");
				  System.out.println("需要继续购买请输入Y,否则输入N");
				  a=sc1.next();
				  break;
			  case 2:
				  System.out.println("请输入你需要购买毛巾的数量:");
				  int towelnumber=sc1.nextInt();
				  double towelnum=towelnumber*towel;
				  System.out.println("你购买了毛巾"+towelnumber+"个,需要
                                            花费"+towelnum+"元");
				  System.out.println("需要继续购买请输入Y,否则输入N");
				  a=sc1.next();
				  break;
			  case 3:
				  System.out.println("请输入你需要购买水杯的数量:");
				  int cupnumber=sc1.nextInt();
				  double cupnum=cupnumber*cup;
				  System.out.println("你购买了水杯"+cupnumber+"个,需要花
                                             费"+cupnum+"元");
				  System.out.println("需要继续购买请输入Y,否则输入N");
				  a=sc1.next();
				  break;
			  case 4:
				  System.out.println("请输入你需要购买苹果的数量:");
				  int applenumber=sc1.nextInt();
				  double applenum=applenumber*apple;
				  System.out.println("你购买了苹果"+applenumber+"斤,需要
                                            花费"+applenum+"元");
				  System.out.println("需要继续购买请输入Y,否则输入N");
				  a=sc1.next();
				  break;
			  case 5:
				  System.out.println("请输入你需要购买香蕉的数量:");
				  int banananumber=sc1.nextInt();
				  double banananum=banananumber*banana;
				 System.out.println("你购买了香蕉"+banananumber+"斤,需要
                                            花费"+banananum+"元");
				  System.out.println("需要继续购买请输入Y,否则输入N");
				  a=sc1.next();
				  break;
			  }
		  }
		  System.out.println("期待您的下次光临!");
	  }
}

​ 第9~16行代码我们定义了5种商品的单价以及一个String类型的数据”a”与int类型的数据”i”,”a”用于while循环条件,判断是否继续循环,”i”用于switch选择语句的条件;

​ 第17~22行代码打印了各个商品的价格供用户选择,第23~75行代码,为了实现用户多次购买,我们使用while循环语句嵌套switch条件语句。

【案例2-4】 为新员工分配部门

【案例介绍】

  1. 任务描述

​ 某公司现有java程序开发部门、C#程序开发部门、asp.net程序测试部门、前端程序开发部门四个部门。编写一个程序实现新入职的员工的部门分配,要求根据用户输入的员工姓名和应聘语言确定员工应该分配到哪个部门。若公司没有与输入的语言匹配的部门,则进行相关提示。

  1. 运行结果

任务运行结果如图2-1所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmF3h0Lf-1649666413127)()]

图2-1 运行结果

【案例目标】

  • 学会分析"新员工分配部门"程序的实现思路。

  • 根据思路独立完成” 新员工分配部门”的源代码编写、编译及运行。

  • 掌握在程序中使用switch条件语句进行运算操作。

【案例思路】

​ (1) 从任务描述中可知,我们需要使用Scanner类让用户输入新员工的姓名以及应聘的语言,并使用两个String数据接收用户输入的内容。

​ (2) 从任务描述中可知,我们可以使用switch条件语句根据语言判断所被分配的部门。

​ (3) 最后在switch条件语句中打印新员工姓名加所处的部门。

【案例实现】

​ 新员工分配部门的实现代码,如文件2-4所示。

文件2-4 department.java

package chapter0204;
import java.util.Scanner;
public class department {
	  public static void  main (String[] args) {
		/*
		 * 根据用户输入的信息确定员工应分配到那个部门。
		 */
		  Scanner sc =new Scanner(System.in);
		  System.out.println("请输入新员工的姓名:");
		  String name=sc.next();
		  System.out.println("请输入新员工应聘的语言:");
		  String language=sc.next();
		  switch(language){
			  case "Java":
                case "java":
				System.out.println(name+"被分配到java程序开发部门");
				break;
			  case "C#":
                case "c#":
				System.out.println(name+"被分配到c#程序开发部门");
				break;
			  case "asp.net":
				System.out.println(name+"被分配到asp.net程序测试部门");
				break;
			  case "html":
                case "Html":
				System.out.println(name+"被分配到前端程序开发部门");
				break;
			  default:
		System.out.println("抱歉,本公司不需要"+language+"语言的人。");
			      break;
		  }
	  }
}

​ 第8~12行代码是让用户输入新员工的姓名和语言并使用String类型的数据接收,第13~32行代码使用switch条件语句根据用户输入的语言判断新员工应该被分配到那个部门。

​ 需要注意的是,在switch语法中每个case关键字可以作为一个条件分支,但是对于多个条件采取相同业主务处理的情况,可以把多个case分支关联在一起,省略它们之间的break语句,而在最后一个相同的case分支中实现业务处理并执行break语句,就像本实例中应用的那样。

【案例2-5】 剪刀石头布小游戏

【案例介绍】

  1. 任务描述

​ “剪刀石头布”的游戏相信大家都不陌生,本案例要求编写一个剪刀石头布游戏的程序。程序启动后会随机生成1~3的随机数,分别代表剪刀、石头和布,玩家通过键盘输入剪刀、石头和布与电脑进行5轮的游戏,赢的次数多的一方为赢家。若五局皆为平局,则最终结果判为平局。

  1. 运行结果

任务运行结果如图2-1所示。

手机屏幕截图  描述已自动生成

图2-1 运行结果

【案例目标】

  • 学会分析"剪刀石头布游戏"程序的实现思路。

  • 根据思路独立完成” 剪刀石头布游戏”的源代码编写、编译及运行。

  • 掌握在程序中使用for循环语句进行循环操作。

  • 掌握在程序中使用if添加判断语句进行游戏的规则判断以及输赢判断。

【案例思路】

​ (1) 从运行结果中分析可知,我们需要使用先打印头部显示的内容。在使用for循环5次Scanner类的用户输入代码以及随机数,这样我们就可以得到5个用户输入和5个随机数。
​ 随机数可以使用Random类中的nextInt(int n)方法,如下代码会生成一个1-9的随机数:

 int randomNumber=new Random().nextInt(10);

​ (2) 从任务描述中可知,我们生成的是1-3的随机数,可以把1代表剪刀,2代表石头,3代表布,首先使用if…else语句判断用户输入的内容,再根据随机生成的数字与玩家输入的内容做判断,可以得出一轮游戏的输赢。

​ (3) 最后在程序的开始定义两个int变量作为记录游戏输赢的值,在游戏中玩家获胜一句时a+1,在游戏平局时b+1,再使用if…else语句判断,将结果分过获胜、和局、失败三种结果。如果玩家与电脑获胜场次一致那结果为和局,如果玩家获胜场次大于电脑那么结果为获胜,反之则为失败。

【案例实现】

​ 剪刀石头布游戏的实现代码,如文件2-5所示。

文件2-5 game.java

package chapter0205;
import java.util.Random;
import java.util.Scanner;
public class game {
	  public static void  main (String[] args) {
	 //通过Random类中的nextInt(int n)方法,生成1-3的随机数   1代表剪刀 2代表           
      //石头 3代表布
	  int a=0;   //玩家获胜场次
	  int b=0;   //平局场次
	  System.out.println("程序已启动");
	  System.out.println("剪刀  石头  布");
	  Scanner sc = new Scanner(System.in);
	  for(int i = 1; i<=5;i++){
		  System.out.println("第"+i+"局");
		  String enter = sc.next();  //接收用户输入的字符
           //随机生成1-3的随机数
		  int randomNumber=new Random().nextInt(3)+1; 
		  if(enter.equals("剪刀")) {    //判断用户输入的字符
			  if(randomNumber==1) {    //判断谁输谁赢
				  System.out.println("电脑本次出的是剪刀");
				  System.out.println("打平了");
				  b++;    //平局后b+1
			  }else if(randomNumber==2) {
				  System.out.println("电脑本次出的是石头");
				  System.out.println("你输了");
			  }else if(randomNumber==3) {
				  System.out.println("电脑本次出的是布");
				  System.out.println("你赢了");
				  a++;      //玩家赢后 a+1
			  }
		  }else if(enter.equals("石头")) {
			  if(randomNumber==1) {
				  System.out.println("电脑本次出的是剪刀");
				  System.out.println("你赢了");
				  a++;
			  }else if(randomNumber==2) {
				  System.out.println("电脑本次出的是石头");
				  System.out.println("打平了");
				  b++;
			  }else if(randomNumber==3) {
				  System.out.println("电脑本次出的是布");
				  System.out.println("你输了");
			  }
		  }else if(enter.equals("布")) {
			  if(randomNumber==1) {
				  System.out.println("电脑本次出的是剪刀");
				  System.out.println("你输了");
			  }else if(randomNumber==2) {
				  System.out.println("电脑本次出的是石头");
				  System.out.println("你赢了");
				  a++;
			  }else if(randomNumber==3) {
				  System.out.println("电脑本次出的是布");
				  System.out.println("打平了");
				  b++;
			  }
		  }else {
			  System.out.println("输入错误,游戏终止!请您认真玩游戏!");
		  }
	  }
	  System.out.println("本次游戏您赢了"+a+"局,平了"+b+"局");
	  int c = 5-a-b;    //计算出电脑胜利的场次
	  if(a==c) {         //和局
		  System.out.println("和局!");
	  }else if(a>b) {   //获胜
		  System.out.println("您赢了!");
	  }else{
		  System.out.println("您输了!");
	  }
	  }
}

​ 第8~9行代码定义了两个int变量用于记录每局游戏的赢或平局。第13~17行代码使用for循序5次,打印了第几局游戏、循环了5次用户输入以及5个1-3的随机数。第18~60行代码使用if…else语句判断,将用户输入的字符分为4类:

  1. 如果用户输入了剪刀,电脑随机出2,用户就可以获胜;电脑随机出1,为平局;电脑随机出3,用户此局为输;

  2. 用户输入石头,电脑随机出1,用户就可以获胜;

  3. 用户如果输入布,电脑随机出2,用户就可以获胜;

  4. 用户如果输入其他字符,则为判断无效,程序将停止;

61~70行代码使用if…else语句判断游戏最终的输赢。

【案例2-6】 登录注册小程序

【案例介绍】

  1. 任务描述

编写程序实现简单的登录注册功能。程序包含以下4个功能:

(1)登录功能,用户输入正确的账号密码进行成功;

(2)注册功能,输入用户名和密码进行注册;

(3)查看功能,查看所有的用户名与密码;

(4)退出功能,退出系统。

​ 用户可以输入对应的编号进行相应的功能操作。例如,输入2进入注册功能,输入用户名和密码进行注册。

  1. 运行结果

任务运行结果如图2-1所示。

手机屏幕截图  描述已自动生成图2-1 运行结果

【案例目标】

  • 学会分析"登录注册"程序的实现思路。

  • 根据思路独立完成”登录注册”的源代码编写、编译及运行。

  • 掌握根据"登录注册"程序功能的不同,将功能封装到不同的方法中。

  • 能够使用数组解决注册功能的添加问题

  • 能够使用数组实现查看功能

  • 掌握方法和数组的使用

【案例思路】

​ (1) 在存储账号密码时,如果对每一个用户的账号密码都定义两个变量存储,则会出现过多孤立的变量,很难一次性将全部数据持有。此时,可以使用数组解决多个数据的存储问题。创建一个可以存储多个用户账号数组和一个可以存储多个用户密码的数组。需要注意的是,需要在两个数组前加上static属性,这样做是为了让本类都可以使用到这两个数组。

​ (2) 从运行结果可以看出,我们首先打印出了可以操作的列表以及序列号,我们可以定print方法来实现打印。

​ (3) 从运行结果可以看出,查看功能是将已有的用户信息打印,我们需要使用for循环打印我们已有的账号数组和密码数组。

​ (4) 注册功能是在定义好的账号数组和密码数组添加新的数据,这里我们会需要的增加账号和密码数组的长度。增加原有数组长度时,需要先定义两组新的数组,在原有数组的长度上增加长度,并将原有的数组复制进新的数组。
​ 将原有的数组复制进新的数组时需要使用到System的arraycopy方法,arraycopy方法的用法如下所示。

     arrayCopy(arr1, 2, arr2, 5, 10);

​ 此句代码是将arr1数组里从索引为2的元素开始, 复制到数组arr2里的索引为5的位置, 复制的元素个数为10个。

​ (5) 登录功能可以使用for循环判断用户输入的字符与数组中的字符是否匹配,以此来判断是否登录成功。

​ (6) 退出功能可以使用System的exit方法。

​ (7) "登录注册"程序明确的分为4个功能,如果将多个独立的功能代码写在一起,代码将会相对冗长,可以使用针对不同功能将其封装到不同的方法中,将完整独立的功能分离出来,然后只需要在程序的main()方法中调用方法即可。

【案例实现】

登录注册程序的实现代码,如文件2-6所示。

文件2-6 user.java

import java.util.Scanner;
public class user {
	// 存储用户名和密码
	public static String arr1[] = new String[3];
	public static String arr2[] = new String[3];
	static int index = 0;
	public static void main(String[] args) {
        arr1[0] = "heima";
        arr2[0] = "123456";
   while (true) {
       print();
       Scanner scan = new Scanner(System.in);
       System.out.println("请选择功能:");
       String str = scan.next();
       if (str.equals("1")) {
          login();
        } else if (str.equals("2")) {
           register();
        } else if (str.equals("3")) {
        	show();                         //用户退出
           break;
        } else if (str.equals("0")) {
        	System.exit(0);
        } else {
        	System.out.println("输入错误");
        }
      }
	}
	/*
	 * 登录功能,键盘输入用户名与密码
	 * 使用for循环加if判断验证输入的用户名与密码是否正确
	 */
	public static void login() {
		for (int i = 0; i < 3; i++) {
			Scanner scan1 = new Scanner(System.in);
			System.out.println("请输入用户名:");
			String str1 = scan1.next();
			Scanner scan2 = new Scanner(System.in);
			System.out.println("请输入密码:");
			String str2 = scan2.next();
			for (int i1 = 0; i1 < arr2.length; i1++) {
				if (str1.equals(arr1[i1]) && str2.equals(arr2[i1])) {
					System.out.println("登录成功!");
					return;
				}
			}
			System.out.println("登录失败,请重新输入!");
		}
	}
	/*
	 * 注册功能,键盘输入用户名与密码
	 * 定义一个boolean变量,使用for循序判断用户是否存在
	 * 如果用户不存在,在数组中插入注册的账号密码时
	 * 可能会有数组长度不够的情况,所以需要使用到
	 * 增加数组的长度,这里调用增加数组长度的方法add()。
	 */
	public static void register() {
		Scanner scan1 = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String str1 = scan1.next();
		Scanner scan2 = new Scanner(System.in);
		System.out.println("请输入密码:");
		String str2 = scan2.next();
		boolean flag = true;
		for (int i = 0; i < arr1.length; i++) {
			if (str1.equals(arr1[i])) {
				System.out.println("用户名已存在");
				flag = false;
			}
		}
		if (flag == true) {
			index++;
			if (index < arr1.length) {
				arr1[index] = str1;
				arr2[index] = str2;
				System.out.println("注册成功!");
			} else {
				add();
				arr1[index] = str1;
				arr2[index] = str2;
				System.out.println("注册成功!");
			}
		}
	}
	/*
	 * 查看功能
	 * 使用for循环打印两个数组的长度
	 */
	public static void show() {
		for (int i = 0; i < arr1.length; i++) {
			if (arr1[i] != null) {
			System.out.println("用户名:" + arr1[i] + "," + "密码:" 
                                           + arr2[i]+ "\n");
			}
		}
	}
	/*
	 * 增加数组长度
	 * 先定义两个新的数组并在原有的数组长度上加3
	 * 使用System的arraycopy方法复制原有的数组到新的数组
	 * 最后将新的数组赋值给原有的arr1与aar2
	 */
	public static void add() {
		String newarray1[] = new String[arr1.length + 3];
		String newarray2[] = new String[arr1.length + 3];
		System.arraycopy(arr1, 0, newarray1, 0, arr1.length);
		System.arraycopy(arr2, 0, newarray2, 0, arr1.length);
		arr1 = newarray1;
		arr2 = newarray2;
		show();
	}
	/*
	 * 可操作功能的显示
	 */
	public static void print() {
		System.out.println("--------------------黑马管理系统--------------------");
		System.out.println(" 1.登录功能 (login) ");
		System.out.println(" 2.注册功能(register) ");
		System.out.println(" 3.查看(show) ");
         System.out.println(" 0.退出(exit) ");
		System.out.println("--------------------黑马管理系统--------------------");
    }
}                                             

​ 在文件2-6中,第5~7行代码使用static定义了全局变量arr1[]数组用于用户名存储,arr2[]数组用于密码存储,index用于数组的下标。第34-50行代码定义了用户登录的方法,使用for循环数组的长度,使用if判断输入的用户名与密码是否与数组中的匹配,可以得出登录成功或者失败。

​ 第58~85行代码是用户注册的方法,定义一个boolean变量,使用for循序判断用户是否存在如果用户不存在,在数组中插入注册的账号密码时可能会有数组长度不够的情况,所以需要使用到增加数组的长度,这里调用增加数组长度的方法add()。

​ 第90~96行代码是查看方法是实现,使用for循环打印arr1[]与arr2[]。

​ 第103~111行代码是增加数组长度的方法,先定义两个新的数组并在原有的数组长度上加3使用System的arraycopy方法复制原有的数组到新的数组最后将新的数组赋值给原有的arr1与aar2。

​ 第115~120行代码是对可操作功能的显示。

​ 第11~28行代码是main方法,使用while循环用户操作,调用封装好的方法实现登录注册小功能。

【案例2-7】 抽取幸运观众

【案例介绍】

  1. 任务描述

​ 在一些节目活动中,经常会有抽取幸运观众环节。本案例要求编写程序实现幸运观众的抽取,在指定人群中随机抽取一名幸运观众。

案例功能要求如下:

(1) 从键盘输入3名观众。

(2) 存储观众姓名。

(3) 总览观众姓名。

(4) 随机选取一名观众,并打印出该观众姓名。

  1. 运行结果

任务运行结果如图2-1所示。

手机屏幕截图  描述已自动生成

图2-1 运行结果

【案例目标】

  • 学会分析"抽取幸运观众"程序的实现思路。

  • 根据思路独立完成” 抽取幸运观众”的源代码编写、编译及运行。

  • 能够根据"抽取幸运观众"程序功能的不同,将功能封装到不同的方法中。

  • 能够使用数组解决多个观众姓名的存储问题。

  • 掌握方法和数组的使用。

【案例思路】

​ (1) 在存储观众姓名时,如果对每个观众都定义一个变量进行姓名存储,则会出现过多鼓励的变量,很难一次性将全部数据持有。此时,可以使用数组解决多个数据的存储问题。创建一个可以存储多个观众姓名的数组,这里我们设置数组的长度为3。

​ (2) 键盘输入观众姓名。将输入的姓名依次赋值给数组各元素,此时便存储了所有观众姓名。键盘输入需要使用Scanner类,以下代码能够从键盘输入中读取一个字符串。

Scanner sc=new Scanner(System.in);

String str=sc.next();

​ (3) 对数组进行遍历,打印出数组每个元素的值,即实现了对每个观众姓名的总览。

​ (4) 根据数组长度,获取随机索引,这里我们的数组长度为3,所以获取的随机索引只能在0-2之间,通过随机索引获取数组中的姓名,该姓名也就是随机的姓名。获取随机索引可以使用Random类中的nextInt(int n)方法。

​ (5) "抽取幸运观众"明确第分为了3个功能,如果将多个独立功能的代码写在一起,代码相对冗长,可以针对不同的功能将其封装到不同的方法中,将完整独立的功能分离出来,然后只需要在程序的main()方法中调用这3个方法即可。

【案例实现】

新员工分配部门的实现代码,如文件2-7所示。

文件2-7 audience.java

import java.util.Random;
import java.util.Scanner;
public class audience {
	/*
	 * 存储姓名
	 * 创建一个存储多个姓名的容器(数组)
	 * 键盘输入每个同学的姓名,存储到容器中(数组)
	 */
	public static void addAudience(String[] audience) {
	    //键盘输入多个姓名到容器中
		Scanner sc=new Scanner(System.in);
		for (int i = 0; i < audience.length; i++) {
			System.out.println("存储第"+(i+1)+"个姓名:");
			//接收控制台录入的姓名字符串
			audience[i]=sc.next();
		}
	}
	/*
	 * 总览全部姓名
	 */
	public static void printAudience(String[] audience) {
	    //遍历数组,得到每个观众姓名
		for (int i = 0; i < audience.length; i++) {
			String name=audience[i];
			System.out.println("第"+(i+1)+"个观众姓名:"+name);
		}
	}
	/*
	 * 随机点名
	 */
	public static String randomAudience(String[] audience) {
	    //根据数组的长度,获取睡觉索引
		int index = new Random().nextInt(audience.length);
		//通过随机索引从数组中获取姓名
		String name=audience[index];
		//返回随机到的姓名
		return name;
	}
    public static void main(String[] args) {
    	System.out.println("--------抽取幸运观众---------");
		//创建一个长度为3的数组存储观众姓名
    	String[] audience=new String[3];
    	//存储观众姓名
    	addAudience(audience);
    	//总览观众姓名
    	printAudience(audience);
    	//随机抽取一名幸运观众
    	String randomName=randomAudience(audience);
    	System.out.println("随机抽取的幸运观众是:"+randomName);
    }
}

​ 在文件2-7中,第10~18行代码定义了一个addAudience()方法,用于实现存储观众姓名的功能。其中,通过创建一个String类型的数组audience来存储多个观众姓名,借助Scanner类通过键盘输入的方式输入观众的姓名,并将这些姓名依次存储到数组元素中;

​ 第22~28行代码定义一个printAudience ()方法,用于实现总览观众姓名的功能,通过遍历数组audience的方式打印每一位观众的姓名;

​ 第32~39行代码定义一个randomAudience ()方法,用于实现随机点名其中一人的功能,通过Random类的nextInt(intn)方法获取随机索引,然后根据随机索引从数组中获取姓名,这个姓名就是幸运观众的姓名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CH2-Java编程基础(7个案例实现) 的相关文章

  • 如果我在 XML 布局中声明一个片段,如何将它传递为 Bundle?

    我有一个活动已替换为片段 该活动采用了一个 Intent 其中包含一些有关该活动应该显示哪些数据的额外信息 现在 我的 Activity 只是执行相同工作的 Fragment 的包装器 如果我使用标记在 XML 中声明该片段 如何将该捆绑包
  • Java:如何将ArrayList作为对象的实例变量?

    我正在开展一个班级项目 用 Java 构建一个小型 Connect4 游戏 我目前的想法是拥有一类 Columns 它具有一些整数 索引 最大长度 isFull 作为实例变量 以及一个 ArrayList 来接收上面的整数和每个玩家的表现
  • 在Java中如何将数字转换为字母?

    有没有比这更好的方法将数字转换为其字母等效值 private String getCharForNumber int i char alphabet ABCDEFGHIJKLMNOPQRSTUVWXYZ toCharArray if i g
  • 正则表达式奇/偶数

    我有一个正则表达式问题 我不知道该怎么做 它必须匹配开头包含任意数量的 a 的所有字符串 如果 a 的数量为偶数 则匹配单个 0 如果 a 的数量为奇数 则匹配单个 1 如何跟踪偶数 奇数 Sample aaa1 aaaa0 a aa 1
  • 如何生成带logo的二维码?

    我正在为 Android 设备开发应用程序 我想生成带有徽标的二维码 With ZXing I know how to generate simple QR codes like this one But I want to generat
  • 如何设置评分栏的星星颜色?

    如何设置评分栏的星星颜色 我想要黄色星星 最简单的方法 android progressTint color color 光滑有光泽
  • 查看登录设备

    我想查看Log在设备上 即System out println 我可以查看DDMS但如何在运行时在设备屏幕上查看APK文件 还有一个适用于 Android 的 Logcat 应用程序 code google com p android ra
  • Java 拖放图像并在拖动时显示图像缩略图

    我有一个带有图像节点的网格布局 我想在我的应用程序中添加 dnd 功能 例如 当我将图像节点拖放到目标 JPanel 时 进行一些操作 例如以原始大小显示 删除等 我已经实现了这与一种使用 Transferhandler 的方法和一种使用
  • 关于Java中trim()方法的查询

    我之前提出了一个问题 但遭到了严厉的批评 所以我在这里再次提出 更简单 并重新措辞以吸引那些可能担心我之前提出问题的方式的人 背景 我正在解析一些 HTML 以获取信息 我将所有内容隔离在一系列行中 但我希望抓取的内容以及后面的一堆空格 为
  • Java程序在没有定义main方法的情况下如何运行?

    我正在浏览一些 Java 源代码并注意到main方法未定义 Java如何编译源码却无从下手 The main方法仅在 Java 虚拟机执行代码时使用 没有 a 则无法执行代码main方法 但仍然可以编译 编译代码时 通常在命令行上指定一组文
  • 为什么要分离接口和实现?

    在生产代码中 我经常看到定义如下的类 public interface SomeComponent Some methods public class SomeComponentImpl implements SomeComponent S
  • C# 到 Java:Base64String、MemoryStream、GZipStream

    我有一个在 NET 中压缩的 Base64 字符串 我想将其转换回 Java 中的字符串 我正在寻找一些与 C 语法等效的 Java 语法 特别是 Convert FromBase64String 内存流 压缩流 这是我想要转换的方法 pu
  • 动态元素 ID 到 setId(int) - Android

    我看到了语法定义setId int and findViewByID int 但我们如何使用findViewById R id row1 我尝试使用这个 Object1 setId Integer parseInt repeat 它没有显示
  • Android 是否可以获取用户和设备所在国家/地区的货币代码?

    是否可以获取用户和设备所在国家 地区的货币代码 我想将用户当前国家 地区的国家 地区代码设置为默认国家 地区 我们在 Android 中有解决方案吗 由于这段代码可能对您有帮助 public class CurrencyTest publi
  • 如何从java程序中编译.java文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 Java 内部编译外部 java 文件 https stackoverflow com questions 10889186 compiling external java files from
  • 使用java服务中的Zxing库从单个图像文件中读取多个条形码

    您好 我已经创建了一个java服务 用于从此处的图像中读取条形码 我使用Zxing库来解码此处的文本 挑战是 如果一个带有单个条形码的文件工作正常 如果有多个条形码 它会产生不相关的结果 我在下面给出了我的代码 pom xml
  • 尝试将过滤器添加到 Grizzly+Jersey 应用程序时出现问题

    我有这个服务器初始化类 package magic app main import org glassfish grizzly http server HttpServer import org glassfish jersey grizz
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • 编写代码以:启动 R 会话、运行 R 脚本、终止会话、重复

    我正在寻找一种简单的 设置后就忘记它 的方式 无论是作为终端中的单个参数字符串还是简单的 Java 程序 来自动执行以下操作 1 启动R会话 2 告诉 R 源 R 文件包含冗长的并行模拟代码 3 完成后终止R会话 4 开始一个新的R会话 5
  • OutputStream 到 DB2 数据库表的 BLOB 列

    在 DB2 数据库中 我有下表 CREATE TABLE MyTestTable MYPATH VARCHAR 512 NOT NULL MYDATA BLOB CONSTRAINT MYTESTTABLE PK PRIMARY KEY M

随机推荐

  • python装饰器

    装饰器是python一个重要的部分 由它的名称我们就可以大致了解到它的功能 拓展其他函数 装饰器可以让我们的代码更加简洁 也更加pythonic 首先 我们先回顾一下基础概念 一 在python中 如果调用一个函数不带括号时 调用的是这个函
  • R语言多任务处理与并行运算包——foreach

    作者简介Introduction 杜雨 EasyCharts团队成员 R语言中文社区专栏作者 兴趣方向为 Excel商务图表 R语言数据可视化 地理信息数据可视化 个人公众号 数据小魔方 微信ID datamofang 数据小魔方 创始人
  • SpringBoot原理

    1 SpringBoot实现原理 SpringBoot是由自动配置和启动器以及大量注解实现 Stater stater就是启动器 也就是我们在pom xml文件中引入的带stater的依赖 springboot框架会根据依赖加载与该启动器有
  • Shell脚本入门

    Shell脚本入门 1 基本概念 Shell是一门弱类型 解释型 非编译型语言 Shell中无数据类型 Shell的作用是解释执行用户的命令 Shell执行命令的方式有两种 1 交互式 用户输入一条命令 shell就解释执行一条 2 批处理
  • 名为dash的蓝色插嘴小机器人_全球最出色的十大教育机器人

    2016年 阿尔法狗战胜围棋世界冠军李世石 成为人工智能发展的标志性事件 万物互联的时代 人工智能正掀起一场影响深刻的技术革命 谷歌 苹果 BAT 华为巨头们纷纷布局人工智能 有人猜测 互联网 过后 我们可能会迎来机器人 听到这个消息 爸爸
  • [PCIe] SR-IOV (单根虚拟化) 及linux驱动浅析(device的PF和VF及其驱动)

    网上从服务器和虚拟化层面介绍SR IOV应用的文章很多了 本文重点从支持SR IOV的设备 EP 及其驱动来讨论 对于SR IOV的设备 EP 来说 无非就是一个device通过物理功能 PF 虚拟出关联的若干个虚拟功能 VF host的驱
  • 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类, 属性: 员工的姓名,员工的生日月份。 方法:getSalary(

    代码 某公司的雇员分为以下若干类 Employee 这是所有员工总的父类 属性 员工的姓名 员工的生日月份 方法 getSalary intmonth 根据参数月份来确定工资 如果该月员工过生日 则公司会额外奖励100 元 Salaried
  • 在proteus中继电器的驱动与使用

    在进行proteus仿真驱动继电器时候 因为第一次接触和学习继电器遇到了无论采用电源驱动还是三极管放大驱动都无法驱动的问题 所以就查了继电器的资料和proteus中的默认设置 发现原来是proteus中继电器默认驱动电压为12V 所以我们需
  • CF 709C

    感谢这个题让我进了前1000 思路 特殊条件切入 一开始想跑网络流 但边数 点数太多 所以就需要找此题和常规网络流的区别 看到 M 2 gt 尽可能使用M 2这个条件构造解 gt 少于M 2的全选 gt 剩下的全是大于M 2的 gt 如果每
  • linux-docker

    unix liunx windows linux 文件系统 所有的资源都是目录在 root 根目录下 一 指令 ip addr ifconfig cd ls vim sudo 管理员身份 代表换行输入 pwd 查看所在目录 sudo sys
  • 12306模拟登陆一直提示系统繁忙_12306买高铁火车票显示待核验怎么办,最新解决方案...

    知道有些人没耐心 先说解决核心是12306里面人脸识别 亲测有效 全文没几个字一定要看不用去车站走冤枉路啊 身份信息不能自动核验 相信吃过亏的不止我一个 网上找了很多方法不行 问客服也没用 终于自己找到一个方法 相继解决了我妈和我朋友的待核
  • Maven项目中properties文件的加载方式

    Maven项目中 读取properties配置文件 1 properties文件在src main java的根目录中时加载文件使用 PropertyConfigurator configure log4j properties 2 pro
  • FFmpeg进阶: 音频滤镜大全

    在做音频处理模块的时候 为了对声音进行优化处理 我很多时候会使用各种算法对音频进行变换 效果包括变音变调 声音降噪等等 其实FFmpeg库里的滤镜模块包含了很多有用的音频滤镜算法 这对于提升开发效率避免重复造轮子是很有帮助的 这里翻译了一下
  • Android apk 项目一键打包并上传到蒲公英

    项目一键打包并上传到蒲公英 缘由 测试流程由 打包 找包准备上传 填写更新信息 然后上传 过于复杂 所以想要简化开发 阅读须知 需要读者了解如何在项目里面建立一个空的gradle plugin的过程 否则这篇文章不适合你 开始分析 我想要的
  • jdbc控制自动提交功能

    import java sql Connection import java sql DriverManager import java sql ResultSet import java sql SQLException import j
  • opencv-python入门学习(1)

    opencv python入门 环境安装与配置 图像入门 图片的读取 显示和保存 cv imread 读取图像 cv imshow 显示图像 cv imwrite 储存图像 视频的读取 显示和保存 从摄像机 文件中读取并显示视频 保存编辑后
  • npm安装composer-rest-server等出现错误node-pre-gyp install --fallback-to-build --library

    npm安装composer rest server等出现错误node pre gyp install fallback to build library grpc 1 10 1 install usr local lib node modu
  • 20大中国式弱点营销

    什么是弱点营销 宇宙的精灵 万物的灵长 说的是人类 但现实中 人性的弱点也不少 贪婪 恐惧 嫉妒 懒惰 好色 贪慕虚荣 难抵诱惑 害怕孤独 热爱免费 重视等级 迷信专家 崇拜名人 喜随波逐流 关于人性的一切弱点 正在被消费社会利用和营销 一
  • vector中find 的用法

    vector没有自带的find函数 需要用普通的find函数 使用如下 vector
  • CH2-Java编程基础(7个案例实现)

    案例2 1 库房出入货物程序设计 案例介绍 任务描述 现要对华为和小米两种手机产品进行入库 本案例要求编写一个模拟商品入库的程序 可以在控制台输入入库商品的数量 最后打印出仓库中所有商品详细信息以及所有商品的总库存数和库存商品总金额 商品信