最近安装了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("你输入的格式有误!请重新输入.");
      }
    }
  }
}
}