站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题请教java高手,来帮我解决一下这个问题!急……

请教java高手,来帮我解决一下这个问题!急……

摘要: 请教java高手,来帮我解决一下这个问题!急……


有A、B两地和一个水池,从A地抽水,注入到水池中,再从水池抽水注入到B地。
而水池,不能低于最低水位,也不能高于最高水位。A和B各有一泵站,
两座泵站在随机时间,以随机时间长度,随机台抽水机抽水或注水。
水池根据自身容量允许或禁止泵站抽水,以保证自身处于安全水位。
泵站即使在允许抽水/注水条件下,依然可以根据自身状态(如高/低处水库水位情况)选择抽水/注水,由于只考虑两个泵站一个水库,此功能可由随机数实现。

如何实现此程序,解决问题后及时结帖。急……


是否写几个类来模拟一下水库和抽水机等,还是干吗?


程序应该不难, 关键在于模型.

水池是一个不断变化的状态参数, 泵是个对象, 抽水/注水/停止等动作. 程序不断扫描变化状态, 依据特定的条件去控制A/B两个泵开关即可.


这个问题很简单,有一个变量标示水库的水的多少,让两边的抽水机都以此变量作为能否抽水的依据不就可以了吗?


我想的模式是这样的,程序关键在于写一个实现类,用于判断水池中的水位到什么位置,如果在安全范围内,就进行取水或送水操作。至于A及B泵,可以写成一个多线程运行的类,在run()中调用实现类中的取水及送水方法。至于随机时间的间隔,在run()中用sleep(Math.random());就可以了.


至于具体代码,建议楼主还是自己写一下吧,煅炼一下思维,没人可以代替你思考的




这个算法应该不难实现,只要把一些都想好了就可以了


lz,发动你的大脑思考,这个算法的确不难


你们都装清高,害人的事我来干!!
水池
public class Pool {
public int max;
public int min;
private int content;
public Pool(int start,int max,int min){
content=start;
this.max=max;
this.min=min;
}

//注水
public void addWater(int num) throws Exception{
int result=content+num;
if(result-#60;max){
content=result;
}else{
throw new Exception(-#34;超过警戒水位-#34;);
}
}

//抽水
public void redWater(int num) throws Exception{
int result=content-num;
if(result-#62;min){
content=result;
}else{
throw new Exception(-#34;低于警戒水位-#34;);
}
}
}

地点
public class Place extends Thread {
private Pool pool;
private String name;
public Place(Pool pool,String name){
this.pool=pool;
this.name=name;
}

//注水
public void addWater(int num){
try {
pool.addWater(num);
System.out.println(name+-#34;已注水:-#34;+num);
}
catch (Exception ex) {
System.out.println(-#34;超过警戒水位-#34;);
}
}
//抽水
public void deWater(int num){
try {
pool.redWater(num);
System.out.println(name+-#34;已抽水:-#34;+num);
}
catch (Exception ex) {
System.out.println(-#34;低于警戒水位-#34;);
}
}

//干活
public void run(){
java.util.Random rand=new java.util.Random();
while(true){
if(rand.nextBoolean()){
addWater(rand.nextInt(50));
}else{
deWater(rand.nextInt(50));
}
}
}
}
测试类
public class TestMain {
public static void main(String args[]) {
Pool pool=new Pool(50,100,10);
Place a=new Place(pool,-#34;A地-#34;);
Place b=new Place(pool,-#34;B第-#34;);
a.run();
b.run();
}
}


public class Pool {
public int max;
public int min;
private int content;
public Pool(int start,int max,int min){
content=start;
this.max=max;
this.min=min;
}

//注水
public void addWater(int num) throws Exception{
int result=content+num;
if(result-#60;max){
content=result;
}else{
throw new Exception(-#34;超过警戒水位-#34;);
}
}

//抽水
public void redWater(int num) throws Exception{
int result=content-num;
if(result-#62;min){
content=result;
}else{
throw new Exception(-#34;低于警戒水位-#34;);
}
}
}

地点
public class Place extends Thread {
private Pool pool;
private String name;
public Place(Pool pool,String name){
this.pool=pool;
this.name=name;
}

//注水
public void addWater(int num){
try {
pool.addWater(num);
System.out.println(name+-#34;已注水:-#34;+num);
}
catch (Exception ex) {
System.out.println(-#34;超过警戒水位-#34;);
}
}
//抽水
public void deWater(int num){
try {
pool.redWater(num);
System.out.println(name+-#34;已抽水:-#34;+num);
}
catch (Exception ex) {
System.out.println(-#34;低于警戒水位-#34;);
}
}

//干活
public void run(){
java.util.Random rand=new java.util.Random();
while(true){
if(rand.nextBoolean()){
addWater(rand.nextInt(50));
}else{
deWater(rand.nextInt(50));
}
}
}
}
测试类
public class TestMain {
public static void main(String args[]) {
Pool pool=new Pool(50,100,10);
Place a=new Place(pool,-#34;A地-#34;);
Place b=new Place(pool,-#34;B第-#34;);
a.run();
b.run();
}
}



和数据库连接池有些相似


同意楼上的,所不同的只是要维护两个池。搂住可以看一下DBCP的源码,应有帮助。


这样的东西在现实编程中没有任何意义


import java.util.*;
class Pool {
public int max;
public int min;
public int content;
public Pool(int start,int max,int min){
content=start;
this.max=max;
this.min=min;
}

public void addWater(int num) throws Exception{ //注水
int result=content+num;
if(result-#60;max){
content=result;
}
else{
throw new Exception(-#34;超过警戒水位-#34;);
}
}
void redWater(int num) throws Exception{ //抽水
int result=content-num;
if(result-#62;min){
content=result;
}
else{
throw new Exception(-#34;低于警戒水位-#34;);
}
}
public int returncontent(){
return content;
}
}
class Place extends Thread {
private Pool pool;
private String name;
public Place(Pool pool,String name){
this.pool=pool;
this.name=name;
}
//
void addWater(int num){
try {
pool.addWater(num);
System.out.print(name+-#34;从A地往水库注水:-#34;+num);
System.out.println(-#34; 目前水库水位为:-#34;+pool.content);
pool.returncontent();
}
catch (Exception ex) {
System.out.println(-#34;注水-#34;+num+-#34;超过最高水位-#34;+-#34;停止工作-#34;);
}
}
//
void deWater(int num){
try {
pool.redWater(num);
System.out.print(name+-#34;从水库抽水到B地:-#34;+num);
System.out.println(-#34; 目前水库水位为:-#34;+pool.content);
pool.returncontent();
}
catch (Exception ex) {
System.out.println(-#34;抽水-#34;+num+-#34;低于最底水位-#34;+-#34;停止工作-#34;);
}
}
//
public void run(){
Random rand=new Random();

while(true){
try{
Thread.sleep(1500);
}
catch(Exception e){}
if(rand.nextBoolean()){
addWater(rand.nextInt(20));
}
else{
deWater(rand.nextInt(20));
}
}
}
}
public class TestPool
{
public static void main(String args[]){

Pool pool=new Pool(30,80,5);
Place a=new Place(pool,-#34;-#34;);
Place b=new Place(pool,-#34;-#34;);
a.run();
b.run();
}
}


↑返回目录
前一篇: java到底有哪几个保留字?
后一篇: 如何修改此程序?