2017-11-25 87 views
1

林新,我嘗試寫一些代碼,它用於計算字符串的字母,空格等。所以,我將數組長度設置爲50.但是,當我稍後運行代碼並輸入超過50個字符時,它仍然可以運行,並且總數可能超過50個,爲什麼?謝謝。爲什麼數組似乎比其最大長度更長?

import java.util.Scanner; 

public class javaexcrises { 


    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 

     String astrg = new String(); 
     char[] ch = new char[50]; 
     int charcount=0; 
     int spaccount=0; 
     int numcount=0; 
     int othcount=0; 

     System.out.println("Please enter some word "); 
      if(scan.hasNextLine()){ 
       astrg = scan.nextLine(); 
       ch = astrg.toCharArray(); 

       int i; 
       for(i=0;i<astrg.length();i++){ 
        if(Character.isLetter(ch[i])){ 
         charcount++; 
        } 
        else if(Character.isDigit(ch[i])){ 
         numcount++; 
        } 
        else if(Character.isSpaceChar(ch[i])){ 
         spaccount++; 
        } 
        else{ 
         othcount++; 
        } 
       } 
       System.out.println("Character = "+charcount); 
       System.out.println("Space = "+spaccount); 
       System.out.println("Number = "+numcount); 
       System.out.println("Others ="+othcount); 
       System.out.println("Total = "+ch.length); 
      } 
      scan.close(); 
    } 

} 
+0

你可以省略'= new char [50]',沒有什麼會改變。 –

回答

5
ch = astrg.toCharArray(); 

toCharArray()返回到一個新的數組的引用,並引用替換您分配的舊的。該新數組足夠大以包含整個輸入字符串。

+0

另外值得注意的相似用'字符串astrg =新的字符串()發生;'和'astrg = scan.nextLine();':第一分配是多餘的(如使用'新的字符串()','VS 「」' )。 –

+0

我看,謝謝 – tommy123456789

+0

@ tommy123456789這是你應該能夠看到使用調試器的東西。你練習使用的越多,解決這類問題的速度就越快。 –

1

當我們做astrg.toCharArray(),它返回一個新分配的字符數組,其長度是這樣的字符串的長度和其內容被初始化爲包含由該字符串表示的字符序列。

如果刪除新的char [50]也不會影響。