1. 程式人生 > >Java字串的輸入輸出實驗

Java字串的輸入輸出實驗

  最近安裝了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("你輸入的格式有誤!請重新輸入.");
      }
    }
  }
}
}