import java.io.*;
import java.util.*;
class NT{
//定义数组
static double a[][]={
{0,0,84.3},{0.5,1.0,84.2},{1.0,11.0,84.1},
{2.0,4.2,83.8},{3.0,6.2,83.5},{4.0,8.13,83.3},{5.0,10.0,83.0},
{6.0,12.0,82.7},{7.0,13.7,82.5},{8.0,15.5,82.3},{9.0,17.4,82.0},
{10.0,19.1,81.8},{12.0,22.5,81.3},{14.0,25.6,80.8},{16.0,28.8,80.4},
{18.0,32.0,79.9},{20.0,35.1,79.4},{25.0,41.6,78.4},{30.0,48.0,77.3},
{35.0,53.7,76.3},{40.0,59.2,75.3},{45.0,64.1,74.4},{50.0,68.7,73.4},
{55.0,72.9,72.6},{60.0,76.8,71.1},{65.0,80.5,70.9},{70.0,83.8,70.1},
{75.0,87.0,69.3},{80.0,89.9,68.6},{85.0,92.7,67.9},
{90.0,94.8,67.3},{95.0,97.7,66.5},{100.0,100.0,65.8}
};

//方法1 计算D
static double d(double z,double xf,double f,double xd){
double D=z*xf*f/xd;
return D;
} //方法2 计算W
static double w(double z,double xf,double f,double xd)
{
double D=d(z,xf,f,xd);
double W=f-D;
return W;
} //方法3 计算Xw
static double xw(double z,double xf,double f,double xd)
{
double D=d(z,xf,f,xd);//调用方法1,计算塔顶产品产量D
double W=w(z,xf,f,xd);//调用方法2,计算塔底产品产量W
double Xw=(xf*f-xd*D)/W;
return Xw;
} //方法4 插值法X
static int insertX(double x)
{
int A=0;
for(int i=0;a[i][0]<80;)
{
if((a[i][0]<=x)&&(a[i+1][0]>x))
{
A=i;
break;
}
else
i++;
}
return A;
} //方法5 插值法Y
static int insertY(double y)
{
int A=0;
for(int i=0;a[i][1]<82.0;)
{
if((a[i][1]<=y)&&(a[i+1][1]>y))
{
A=i;
break;
}
else
i++;
}
return A;
}

//方法6 计算回流比R
static double r(double xf,double xd)
{
double Rmin=100;
int b=insertX(xf);//调用方法4,找出xf在数组中的位置!

for(int i=b;a[i][0]<75;i++)//利用for循环,找出最小回流比!
{
double R=(xd-a[i][1])/(a[i][1]-a[i][0]);
{if(Rmin>R)
Rmin=R;
}
}

double Re=1.5*Rmin;
return Re;//返回回流比R
} //方法7 利用提馏段操作线方程,由x(i)求y(i+1)
static double operateT(double z,double x,double xf,double f,double xd)
{
double R=r(xf,xd);  //调用方法6 计算回流比
double D=d(z,xf,f,xd);//调用方法1 计算塔顶产品产量D
double xw=xw(z,xf,f,xd);//调用方法3 计算塔底产品摩尔分率
double y=(R*D+f)*x/((R+1)*D)-(f-D)*xw/((R+1)*D);//根据提馏段操作线方程 由x[i]求y[i+1]
return y;
} //方法8 利用精馏段操作线方程,由x(i)求y(i+1)
static double operateJ(double z,double x,double xf,double f,double xd)
{
double R=r(xf,xd);  //调用方法6计算回流比
double D=d(z,xf,f,xd);//调用方法1,计算塔顶产品产量D
double xw=xw(z,xf,f,xd);//调用方法3,计算塔底产品摩尔分率
double y=R*x/(R+1)+xd/(R+1);
return y;
}
    
//方法9 利用插值公式和平衡数据,由y(i)求x(i)
static double insertXY(double y)
{
int A=insertY(y);//调用方法5 找出y在数组中的位置

/*利用线形插值的方法,由y(i)求x(i)*/
double x=((a[A+1][0]-a[A][0])*(y-a[A][1])/(a[A+1][1]-a[A][1])+a[A][0]);
return x;
}

//方法10 利用插值公式和平衡数据,由y(i)求t(i)
static double insertT(double y)
{
int A=insertY(y);//调用方法9 用同样的方法计算温度T
double T=(a[A][2]-a[A+1][2])*(y-a[A+1][1])/(a[A][1]-a[A+1][1])+a[A+1][2];
return T;
}
 
}//塔板计算程序的主要方法
public class zhu{

public static void main(String[] args)throws IOException
{
double xd,xw,f,xf,z,d,w;
NT zhu1=new NT();

/*向程序输入数据,按小数值输出。
     然后程序将输入的数据乘以100,以方便后面的计算!!
     为方便检查,然后把数据打印出来!!
*/
    
String sLine;
StringTokenizer str;
DataInputStream is=new DataInputStream(System.in);
System.out.println("请您按顺序输入数据 F(kmol/h),xf xd,z(回收率)!!! 以空格键隔开");
sLine=is.readLine();
str=new StringTokenizer(sLine);
f=new Double(str.nextToken()).doubleValue();
xf=new Double(str.nextToken()).doubleValue();
xf*=100;
System.out.println();
System.out.println();
System.out.println("xf:"+xf);
xd=new Double(str.nextToken()).doubleValue();
xf*=100;
System.out.println("xd:"+xd);
z=new Double(str.nextToken()).doubleValue(); /*调用方法1,2,3,
  计算塔顶产品的产量D,塔底产品的产量W,以及塔底产品的摩尔分率 xW,
  并将其打印出来!!
*/
System.out.println();
System.out.println();
d=zhu1.d(z,xf,f,xd);
System.out.println();
System.out.println();
System.out.println("塔顶产品的产量D="+d);
w=zhu1.d(z,xf,f,xd);
System.out.println("塔底产品的产量W="+w);
xw=zhu1.d(z,xf,f,xd);
System.out.println("塔底产品的摩尔分率xW="+xw); //调用方法6 计算回流比,并将最小回流比Rmin和回流比R打印出来!!!
System.out.println();
System.out.println();
double R=zhu1.r(40,80);
System.out.println("最小回流比Rmin="+R/1.5);
System.out.println("塔顶回流比R="+R);
System.out.println();
System.out.println(); //利用for循环,进行理论塔板数的计算!!!
double y[]=new double[41];
double x[]=new double[41];
y[0]=xd;            //将塔顶产品的摩尔分率xd赋值给y[0]!
int A=0,i=0,NT=0;int n=0;
x[0]=zhu1.insertXY(y[0]);//调方法9,由y[0]求x[0]! /*调用方法7,8,利用操作线方程,由x[i]计算y[i]*/
for(i=0,NT=1;(x[i]>xw);i++,NT++)
{
if(x[i]>xf)
y[i+1]=zhu1.operateJ(z,x[i],xf,xd,f);
else
y[i+1]=zhu1.operateJ(z,x[i],xf,xd,f);
x[i+1]=zhu1.insertXY(y[i+1]);
}
           
for(i=0;(x[i]>xw);i++)
{
if((x[i]>=xf)&&(x[i+1]<xf))
{
n=i+2;
break;
}
}

System.out.println("\n\n");

System.out.println("进料板的位置n:"+n+"\n\n");

System.out.println("全塔的理论塔板数 NT 为"+NT+"\n\n");//将理论塔板数NT打印出来

double n1=n/0.52;
System.out.println("实际进料板的位置N为"+n+"\n\n");
double Nt=NT/0.52;
System.out.println("全塔的实际塔板数Nt为"+Nt+"\n\n");
double t[]=new double[40]; /*计算每一块塔板的温度
然后利用for循环将每一次塔板的乙醇的组成和温度输出*/
System.out.println();
System.out.println();
System.out.println();
System.out.println();

for(i=0;i<NT;i++)
{
t[i]=zhu1.insertT(y[i]);
System.out.print("乙醇在第"+(i+1)+"块板的组成;x["+(i+1)+"]为"+x[i]);
System.out.println("    y["+(i+1)+"]为"+y[i]);
System.out.println("乙醇在第["+(i+1)+"]塔板的温度="+t[i]);
System.out.println();
    } System.out.println("\n\n\n\n最后计算结果如下:");
System.out.println("精馏段的理论塔板数nj="+n);
for(int w1=0;;w1++)
if(n1>w1&&n1<(w1+1))
{
n1=(w1+1);
break;
}

System.out.println("精馏段的实际塔板数NJ="+n1);
double nt=NT-n;
double NT1=nt/0.52;
for(int y1=0;;y1++)
if(NT1>y1&&NT1<(y1+1))
{
NT1=(y1+1);
break;
}

System.out.println("提馏段的理论塔板数nt="+nt);
System.out.println("提馏段的实际塔板数NT="+NT1);
System.in.read();
}
}
为什么Java编译时返回使用或覆盖了已过时的 API 要了解详细信息 请使用 -Xlint:deprecation 重新编译的错误?多谢!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【skyseek】截止到2008-07-02 04:37:54的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    警告而已。有些方法
    1 已经过时,有更好的方法可以代替,比如 new java.util.Date().getYear(); => cal.get(Calendar.YEAR);
    2 发现过问题,且无法完全修补,所以使用了新的方法。 比如 URLEncoder.encode(String) => URLEncoder.encode(String,String);
    建议你还是看一下新的方法。
      

  3.   

    java以前的方法都可以用。只不过存在缺陷或者使用了可能会造成某些隐患不赞成使用了而已,如果硬要用的话没有问题的,基本上都能跑。
      

  4.   

    放心你只是使用了比较老的JDK方法活版本只要,相信你是用的应该是JDK1.4.2吧。
    在JCREATER中不用理财继续执行就可以。只要程序没有错误。
      

  5.   

    sLine = is.readLine(); 使这行导致编译有警告信息public final String readLine() throws IOException
    已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 开始,读取文本行的首选方法是使用 BufferedReader.readLine() 方法。
    使用 DataInputStream 类读取文本行的程序可以改为使用 BufferedReader 类,只要将以下形式的代码:
         DataInputStream d = new DataInputStream(in);
     替换为:
         BufferedReader d = new BufferedReader(new InputStreamReader(in));
    参见 DataInput 的 readLine 方法的常规协定。
    从包含的输入流中读取此操作需要的字节。
      

  6.   

    新的 jdk 中 一般都有替代的实现方式。
      

  7.   

    The method readLine() from the type DataInputStream is deprecated  //deprikeit//抗议,不赞成。
           说明:说明这个方法或类java不再建议您使用,以后的版本也不会再更新这个方法或类。