最近安装了MyEclipse,感觉编译器挺好用的,但是电脑是不是装太多东西了,反正使用起来不流畅,如果今年能在年尾过四级,就给自己换台新电脑!
言归正传,Java中和C/C++不太一样的是中文字符在C/C++中有2个字符,而实验中发现Java只有一个。然后就是我用in.next()这样输入流类似于C/C++中的scanf(%s*n),也就是说遇到一个空格就多一个字符串,而in.nextLine()则是读入一行,但是,如果你前面有输入东西的话,并且要用到回车,这时候你就必须在之间多一个in.nextLine()来吃掉一个回车键,类似于C/C++中getchar()的效果。
还有注意的一点是,输入的字符串如果是中文它会一直读不出来,但是用MyEclipse却可以,这可能使DrJava编译器比较古老,总之输入最好改成英文。除此之外Java中的类的使用虽然大同小异,但是Java中还是比较地繁琐!这次找了挺久的BUG是在Java中空串""和NULL是不一样的,不能用str.isEmpty()来判断是否为"",这点要注意了!
代码如下:
import java.util.*;
class ArrayTest2{
static String f(String str){
if(str.length()==0 || str.charAt(0)>'9'||str.charAt(0)<'0')
return "";//空串的时候要注意判断,防止异常
return str.charAt(0)+f(str.substring(1));
}
static int f1(int data)
{
if(data/10==0)
return 1;
return f1(data/10)+1;
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int i,j,DetSize;
double Max,Major,Unmajor;
String str,str1;
while(true){
System.out.println("****请输入一个大于0的整数,否则结束矩阵构建****");
System.out.println("请输入矩阵的规模:");
DetSize=in.nextInt();
if(DetSize<=0){
System.out.println("End!");
break;
}
System.out.println("请输入矩阵的数据:");
double[][] Det=new double[DetSize][DetSize]; //矩阵
double[] A=new double[DetSize];
double[] B=new double[DetSize];
Major=Unmajor=Max=0;
for(i=0;i<DetSize;i++){
for(j=0;j<DetSize;j++){
Det[i][j]=in.nextDouble();
if(i==0&&j==0) Max=Det[i][j];
else if(Max<Det[i][j]) Max=Det[i][j];
A[i]+=Det[i][j];
B[j]+=Det[i][j];
if(i==j) Major+=Det[i][j];
if(i+j==DetSize-1) Unmajor+=Det[i][j];
}
}
System.out.println("****请输入你想要查看的矩阵信息****");
System.out.println("请输入类似于“maindiag”“unmaindiag”、“3row”“4rank”等这样的信息");
System.out.println("按0返回重新构造矩阵");
in.nextLine();
while(true){
str=in.nextLine();
if(str.equals("0"))
break;
else if(str.equals("maindiag")) System.out.println("主对角线的和: "+Major);
else if(str.equals("unmaindiag")) System.out.println("副对角线的和: "+Unmajor);
else if(str.equals("Max")) System.out.println("最大值: "+Max);
else {
str1=f(str);
if(str1.equals("")){
System.out.println("你输入的格式有误!请重新输入.");
continue;
}
j=Integer.parseInt(str1);
i=f1(j);
if(j<1 || j>DetSize || i==str.length())
System.out.println("你输入的格式有误!请重新输入.");
else if(str.substring(i).equals("row")) System.out.println("第"+j+"行的和: "+A[j-1]);
else if(str.substring(i).equals("rank")) System.out.println("第"+j+"列的和: "+B[j-1]);
else System.out.println("你输入的格式有误!请重新输入.");
}
}
}
}
}