Java编程学习的几个典型实例详解

一、模拟酒店房间管理系统,需要如下几个功能:

1、1 in 房间号 客人名字 入住功能

1、2 out 房间号 退房功能

1、3 search 房间号 查询房间状态 如果房间号为-1 则输出所有房间状态

1、4 quit 或 exit 退出

提示:酒店所有的房间用二维数组来实现

代码实现如下:

import java.util.Scanner;

public class HotelDemo {
 //写在类里面,则每个方法都可以访问到,避免了参数传递的繁琐;
 static int h=5,w=10;
 static String[][] rooms=new String[5][10];
 public static void main(String[] args) {
  @SuppressWarnings("resource")
  Scanner s=new Scanner(System.in);
  while(true){
   System.out.println("请输入 in,out,search,quit:");
   String temp=s.next();
   int room=0;
   if("in".equals(temp)){//防止出现空指针异常;
    System.out.println("输入房间号:");
    room=s.nextInt();
    System.out.println("输入名字:");
    String name=s.next();
    if(in(room,name)) System.out.println("入住完成!");
    System.out.println("room"+room+"name"+name);
   }else if("out".equals(temp)){
    System.out.println("输入房间号:");
    room=s.nextInt();
    if(out(room)) System.out.println("退房完成!");
    System.out.println("out"+room);
   }else if("search".equals(temp)){
    System.out.println("输入房间号(-1代表全部):");
    room=s.nextInt();
    search(room);
   }else if("quit".equals(temp)||"exit".equals(temp)){
    break;
   }else{
    System.out.println("命令错误!");
   }
  }
 }

 private static boolean search(int room) {
  if(room==-1){
   //打印所有的信息;
   for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
     int room2=(i+1)*100+j+1;
     System.out.print(room2+"\t");
    }
    System.out.println();
    for(int k=0;k<w;k++){
     System.out.print(rooms[i][k]==null?"empty":rooms[i][k]);
     System.out.print("\t");
    }
    System.out.println();
    System.out.println();
   }
   return true;

  }else{
   int r=room/100-1;
   int c=room%100-1;
   if(r<0||r>=h||c<0||c>=w){
    System.out.println("房间号错误!");
    return false;
   }
   System.out.println(rooms[r][c]==null?"empty":rooms[r][c]);
   return true;
  }
 }

 private static boolean out(int room) {
  int r=room/100-1;
  int c=room%100-1;
  if(r<0||r>=h||c<0||c>=w){
   System.out.println("房间号错误!");
   return false;
  }
  if(rooms[r][c]==null||"".equals(rooms[r][c])){//
   System.out.println("此房间没有人!");
   return false;
  }
  rooms[r][c]=null;
  return true;
 }

 private static boolean in(int room, String name) {
  int r=room/100-1;
  int c=room%100-1;
  if(r<0||r>=h||c<0||c>=w){
   System.out.println("房间号错误!");
   return false;
  }
  if(rooms[r][c]!=null){//
   System.out.println("此房间已经有人!");
   return false;
  }

  rooms[r][c]=name;
  return true;

 }

}

二、螺旋矩阵  例

import java.util.Scanner;

public class SpiralSquare01{

 public static void main(String[]
 args) {
  @SuppressWarnings("resource")
  Scanner
 s=new Scanner(System.in);
  System.out.println("请输入螺旋方阵的长");
  int indexY=s.nextInt();
  System.out.println("请输入螺旋方阵的宽");
  int indexX=s.nextInt();
  if(indexX<=0||indexY<=0){
   System.out.println("输入的数字不合法!");
   return;
  }
  int[][]
 square=new int[indexX][indexY];
  int x=0;
  int y=0;
  for(int i=1;i<=indexX*indexY;){
   while(y<square[x].length-1&&square[x][y+1]==0){
    square[x][y++]=i++;
   }
   while(x<square.length&&square[x][y]==0){
    square[x++][y]=i++;
   }
   while(y>0&&square[x-1][y-1]==0){
    square[x-1][--y]=i++;
   }
   --x;
   while(x>1&&square[x-1][y]==0){
    square[--x][y]=i++;
   }
   y++;
  }
  for(int i=0;i<square.length;i++){
   for(int j=0;j<square[i].length;j++){
    System.out.print(square[i][j]+"\t");
   }
   System.out.println();
  }
 }
}

运行结果:

三、经典数学问题:百鸡问题的变形

题目描述:有36个人,36块砖,每人搬了一次,正好搬完。其中男每人每次搬4块,女每人每次搬3块,小孩两人每次搬一块。问 男、女、小孩各多少人?

public class TestBrick
 {
 public static void main(String[]
 args) {
  int manNum=0;
  int womanNum=0;
  for(int i=0;i<=9;i++){
   for(int j=0;j<12;j++){
    if(((i*4+j*3+(36-i-j)/2)==36)&&((36-i-j)%2==0)){
     //注意:孩子的人数必须是偶数,否则会出现一个孩子一次也没有搬的情况,不符合题意
     manNum=i;
     womanNum=j;
     System.out.println("男的的人数是"+manNum);
     System.out.println("女的的人数是"+womanNum);
     System.out.println("孩子的人数是"+(36-manNum-womanNum));
    }
   }
  }
 }

}

四、倒计时的算法:输入一个秒数,要求转换为XX小时XX分XX秒的格式输出出来

import java.util.Scanner;

public class TestTime {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  @SuppressWarnings("resource")
  Scanner s=new Scanner(System.in);
  System.out.println("请输入秒数:");
  int second =s.nextInt();
  int hour=second/3600;
  int minite=second%3600/60;
  int sec=second%60;

  System.out.println("转换后为:"+hour+"小时"+minite+"分"+sec+"秒");

 }

}

五、密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码;

//密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码;
import java.util.Random;

public class TestPassword
 {

 /**
  *
 @param args
  */
 public static void main(String[]
 args) {
  //
 TODO Auto-generated method stub
    char[]
 pardStore=new char[62];
     //把所有的大写字母放进去
     for(int i=0;i<20;i++){
      pardStore[i]=(char)('A'+i);
     }
     //把所有的小写字母放进去
     for(int i=26;i<52;i++){
      pardStore[i]=(char)('a'+i);
     }

     //吧0到9放进去
     for(int i=52;i<62;i++){
      pardStore[i]=(char)('0'+(i-52));
     }

     //生成6位随机密码
     Random
 r=new Random();
     for(int i=0;i<6;i++){
      int n=r.nextInt(62);
      System.out.print(pardStore[n]);
     }
    }
 }

六、写一个彩票的生成代码: 1-33随机选7个不重复的数字;

import java.util.Random;

//写一个彩票的生成代码: 1-33随机选7个不重复的数字;
public class TestLuckyTicket {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
   int[] luckTickets=new int[7];

   Random r=new Random();
   for(int i=0;i<luckTickets.length;i++){
    luckTickets[i]=r.nextInt(8)+1;
    for(int j=0;j<i;j++){
     if(luckTickets[i]==luckTickets[j]){
      i--;
      break;
     }
    }
   }
   for(int i=0;i<luckTickets.length;i++){
    System.out.print(luckTickets[i]+",");
   }
 }

}

七、定义一个字符串变量String str="床前明月光,疑是地上霜。举头望明月,低头思故乡。"。

打印成如下格式的:

低  举  疑  床

头  头  是  前

思  望  地  明

故  明  上  月

乡  月  霜  光

。  ,  。  ,

public class TestPoet
 {

 /**
  *
 @param args
  */
 public static void main(String[]
 args) {
  //
 TODO Auto-generated method stub
   String
 str="床前明月光,疑是地上霜。举头望明月,低头思故乡。";
   char[]
 poet=str.toCharArray();
   int l=18;
   boolean flag=true;
   int i=0;
   while(flag){
    for(int j=l;j>=(0+i);){
     System.out.print(poet[j]);
     j=j-6;
    }
    System.out.println();
    l++;
    i++;
    if(l==24){flag=false;}
   }
 }

}

八、九宫格的输出:九宫格就是每一行,每一列,斜着的一列和反斜着的一列的所在的数字之和均相等;最基本的是三行三列=9格就是很出名的九宫格;还可以推广到5*5=25个格;只要行和列的个数均相等并且是奇数就可以;

import java.util.Scanner;

public class JiuGongGe {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  @SuppressWarnings("resource")
  Scanner s=new Scanner(System.in);
  System.out.println("请输入一个大于等于3的奇数");
  int length=s.nextInt();
  if(length<3||length%2==0){
   System.out.println("输入的数字不合法!");
   return;
  }
  int[][] nineTable=new int[length][length];
  int indexX=0;
  int indexY=0;
  indexY=(nineTable.length-1)/2;
  nineTable[indexX][indexY]=1;
  for(int i=1;i<nineTable.length*nineTable.length;i++){
   indexX--;
   indexY++;
   if(indexY>=nineTable.length&&indexX>=0){
    indexY=0;
   }else if(indexX<0&&indexY<nineTable.length){
    indexX=nineTable.length-1;
   }else if(indexY>=nineTable.length&&indexX<0){
    indexY--;
    indexX=indexX+2;
   }else if(nineTable[indexX][indexY]!=0){
    indexY--;
    indexX=indexX+2;
   }
   nineTable[indexX][indexY]=i+1;

  }
  for(int i=0;i<nineTable.length;i++){
   for(int j=0;j<nineTable[i].length;j++){
    System.out.print(nineTable[i][j]+" ");
   }
   System.out.println();
   System.out.println();
  }

 }

 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Java中计算时间差的方法

    本文实例讲述了Java中计算时间差的方法.分享给大家供大家参考.具体如下: 假设现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方法一: DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date d1 = df.parse("2004-03-26 13:31:40"); Date

  • java计算百分比值的方法

    本文实例讲述了java计算百分比值的方法.分享给大家供大家参考.具体实现方法如下: public class Test1 { public static String myPercent(int y, int z) { String baifenbi = "";// 接受百分比的值 double baiy = y * 1.0; double baiz = z * 1.0; double fen = baiy / baiz; // NumberFormat nf = NumberForm

  • Java简易计算器程序设计

    编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮, 一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮, 要求将计算公式和结果显示在文本框中,实现效果如下图所示. Java简易计算器代码: import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; imp

  • Java编程计算兔子生兔子的问题

    程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 程序设计: public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 或 publ

  • JAVA计算两个日期相差的实例

    在Java开发物流或是其他功能的时候会用到两个日期 相差多天的数据,所以整理了一下备用.调用方式: 复制代码 代码如下: long date1 = getDateTime("20121201");//可改成自己的日期类型,但以 "20121212"这种格式 long date2 = getDateTime("20121212");   int day = dateInterval(date1, date2);   System.out.print

  • Java实现计算一个月有多少天和多少周

    import java.util.Calendar; /** * 功能概述:计算指定年月的天数和周数<br> * 创建时间:2010-5-17 下午05:25:58<br> * */ public class Test{ public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 2010); // 2010年 c.set(Calendar.MO

  • Java计算几何图形面积的实例代码

    对于每个几何图形而言,都有一些共同的属性,如名字.面积等,而其计算面积的方法却各不相同.为了简化开发,请编写程序,定义一个超类来实现输入名字的方法,并使用抽象方法来计算面积. 思路分析: 所谓超类就是抽象父类,该抽象类中有两个方法,分别用来获取图形的名称和图形的面积.要获得图形的名称,通过类的getClass().getSimpleName()方法可以实现:要获得图形的面积,因为计算面积的方法各不相同,所以该方法是个抽象方法.定义一个子类表示圆形,圆形的半径通过构造方法获得,圆形的面积通过重写超

  • 深入Java分布式计算的使用分析

    如果所有组件都在同一台计算机的同一个Java虚拟机的同一个堆空间上执行是最简单的,但实际中我们面对的往往不是如此单一的情况,如果用户端只是个能够执行Java的装置怎么办?如果为了安全性的理由只能让服务器上的程序存取数据库怎么办? 我们知道,大多数情况下,方法的调用都是发生在相同堆上的两个对象之间,如果要调用不同机器上的对象的方法呢? 通常,我们从某一台计算机上面取得另一台计算机上的信息是通过socket的输入/输出流,打开另一台计算机的socket连接,然后取得outputStream来写入数据

  • java实现计算地理坐标之间的距离

    java实现计算两经纬度点之间的距离,直接上代码,具体解释请参考注释 复制代码 代码如下: package com.jttx.poi.utils; import com.jttx.poi.entity.Point; /**  * Created by louis on 2014/9/2.  */ public class GeoUtils {     /**      * 计算两经纬度点之间的距离(单位:米)      * @param lng1  经度      * @param lat1 

  • Java编程学习的几个典型实例详解

    一.模拟酒店房间管理系统,需要如下几个功能: 1.1 in 房间号 客人名字 入住功能 1.2 out 房间号 退房功能 1.3 search 房间号 查询房间状态 如果房间号为-1 则输出所有房间状态 1.4 quit 或 exit 退出 提示:酒店所有的房间用二维数组来实现 代码实现如下: import java.util.Scanner; public class HotelDemo { //写在类里面,则每个方法都可以访问到,避免了参数传递的繁琐: static int h=5,w=10

  • Java 重载、重写、构造函数的实例详解

    Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定义某个子类型特有的行为. class Animal { public void eat(){ System.out.println ("Animal is eating."); } } class Horse extends Animal{ public void eat(){ Syste

  • java并发学习之BlockingQueue实现生产者消费者详解

    1.介绍 阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满:从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空.并发包下很多高级同步类的实现都是基于BlockingQueue实现的. JDK7提供了以下7个阻塞队列: ArrayBlockingQueue :由数组结构组成的有界阻塞队列. LinkedBloc

  • 应用市场中Java拦截器和切面的使用实例详解

    相信大家对拦截器和切面的概念已经不陌生了,本文我们就看一些在应用市场中,拦截器和切面的使用是怎样的. 拦截器的使用:每次接收到某个请求之前,都会调用此拦截器中的方法,其中preHandle方法如果return true,表示继续调用对应的controller,如果return false, public class CheckLoginInterceptor implements HandlerInterceptor { private Logger logger = Logger.getLog

  • Java设计模式之装饰模式原理与用法实例详解

    本文实例讲述了Java设计模式之装饰模式原理与用法.分享给大家供大家参考,具体如下: 装饰模式能在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.JDK中IO的设计就用到了装饰模式,通过过滤流对节点流进行包装来实现功能的扩展. 装饰模式的角色的组成: ① 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加工功能的对象.(InputStream.OutputStream) ② 具体构件(Concrete Co

  • Java中常见死锁与活锁的实例详解

    本文介绍了Java中常见死锁与活锁的实例详解,分享给大家,具体如下: 顺序死锁:过度加锁,导致由于执行顺序的原因,互相持有对方正在等待的锁 资源死锁:多个线程在相同的资源上发生等待 由于调用顺序而产生的死锁 public class Test { Object leftLock = new Object(); Object rightLock = new Object(); public static void main(String[] args) { final Test test = ne

  • Java根据ip地址获取归属地实例详解

    目录 引言 Java 中是如何获取 IP 属地的 首先需要写一个 IP 获取的工具类 内置的三种查询算法 使用方法 项目用到的全部依赖 引言 最近,各大平台都新增了评论区显示发言者ip归属地的功能,例如哔哩哔哩,微博,知乎等等. Java 中是如何获取 IP 属地的 主要分为以下几步 通过 HttpServletRequest 对象,获取用户的 IP 地址 通过 IP 地址,获取对应的省份.城市 首先需要写一个 IP 获取的工具类 因为每一次用户的 Request 请求,都会携带上请求的 IP 

  • FasfDFS整合Java实现文件上传下载功能实例详解

    在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

  • java 数据结构中栈和队列的实例详解

    java 数据结构中栈和队列的实例详解 栈和队列是两种重要的线性数据结构,都是在一个特定的范围的存储单元中的存储数据.与线性表相比,它们的插入和删除操作收到更多的约束和限定,又被称为限定性的线性表结构.栈是先进后出FILO,队列是先进先出FIFO,但是有的数据结构按照一定的条件排队数据的队列,这时候的队列属于特殊队列,不一定按照上面的原则. 实现栈:采用数组和链表两种方法来实现栈 链表方法: package com.cl.content01; /* * 使用链表来实现栈 */ public cl

  • Java使用AES加密和解密的实例详解

    Java使用AES加密和解密的实例详解 前言: AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128.192.256,分组长度128位,算法应易于各种硬件和软件实现.1998年NIST开始AES第一轮分析.测试和征集,共产生了15个候选算法.1999年3月完成了第二轮AES2的分析.测试.2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES. 在应用方面,尽管DES在安全上

随机推荐