2016-01-24 167 views
1

我們如何打印一個char數組,以便在比較之後,我確實追加了字符串生成器,然後轉換爲char數組。無法打印char []數組

import java.util.*; 

public class duplicatesremoval { 

    public static void main(String[] args){ 

     Scanner sc=new Scanner(System.in); 
     String input=sc.next(); 
     String output= ""; 

     char[] str=input.toCharArray(); 
     char[] str1=output.toCharArray(); 

     StringBuilder sb = new StringBuilder(64); 


     for(int i=0;i<str.length-1;i++){ 
      for(int j=0;j<str1.length-1;j++){ 
       if(str[i]!=str1[j]){ 
        sb.append(str); 
        sb.append(str1); 

        char[] result = sb.toString().toCharArray(); 
       } 

      } 

     } 
     System.out.println(result); // error result cannot be resolved to a variable. 
     sc.close(); 
    } 

} 

我甚至嘗試過使用result.toString,但它沒有奏效。謝謝

+1

您已經聲明內循環'result',之後不可見。 –

回答

2

移動char[]聲明初始化外循環(所以這是有範圍)。另外,你要Arrays.toString(char[])(因爲數組不會覆蓋Object.toString()喜歡的東西,

  // char[] result = sb.toString().toCharArray(); 
     } 
    } 
} 
char[] result = sb.toString().toCharArray(); 
System.out.println(Arrays.toString(result)); 
// ... 
+0

謝謝,我沒有嘗試,但我的輸出不是預期輸出: sneha []任何想法? – Sneha

0

第一關:

for(int i=0;i<str.length-1;i++){ 

-1不需要你有大於號一少「 。<」這意味着如果數組長度是5,也不會超越4.

其次:

System.out.println(result); // error result cannot be resolved to a variable. 

因爲你已經在if語句中聲明瞭'result',所以編譯器很煩惱。它不會允許這樣做,因爲它有一個機會在它到達System.out時,結果不會被聲明。

由於您的問題不清楚,我只能修復您的當前代碼,以便編譯和運行。請使用這個來更新你的問題與工作代碼,並提供一個輸入之前和之後。請注意,只要'輸出'沒有內容,for循環就不會改變。

public static void main(String[] args) { 
     Scanner sc=new Scanner(System.in); 
     String input=sc.next(); 
     String output= ""; 

     char[] str=input.toCharArray(); 
     char[] str1=output.toCharArray(); 
     String result = ""; 

     StringBuilder sb = new StringBuilder(64); 


     for(int i=0;i<str.length;i++){ 
      for(int j=0;j<str1.length;j++){ 
       if(str[i]!=str1[j]){ 
        sb.append(str); 
        sb.append(str1); 

        result = sb.toString(); 
       } 

      } 

     } 
     char[] endResult = result.toCharArray(); 
     System.out.println(endResult); // error result cannot be resolved to a variable. Update: fixed 
     sc.close(); 
    } 
+0

謝謝。這是我的問題陳述 - 刪除字符串中的重複字符而不使用任何附加緩衝區。沒有額外的數組副本。 我無法獲得預期的輸出。 – Sneha

+0

我能夠使用LinkedHashSet獲取輸出,但仍然沒有執行該程序。 – Sneha

+0

不客氣!只是提示未來的問題,請確保包含所需的輸出以及輸入的內容:) – Spencer4134

0

答案可能比您想象的要簡單,但首先我想解決代碼中的一些基本缺陷。

System.out.println(result); // error result cannot be resolved to a variable. 

這樣做的原因是你的變量char[] result的decleration在if聲明的範圍聲明的,不能被這個範圍之外使用,爲此,如果你移動它一點:

public static void main(String[] args){ 

    Scanner sc=new Scanner(System.in); 
    String input=sc.next(); 
    String output= ""; //<- Important to note 

    char[] str=input.toCharArray(); 
    char[] str1=output.toCharArray(); 
    char[] result 

    StringBuilder sb = new StringBuilder(64); 


    for(int i=0;i<str.length-1;i++){ 
     for(int j=0;j<str1.length-1;j++){ 
      if(str[i]!=str1[j]){ 
       sb.append(str); 
       sb.append(str1); 

       result = sb.toString().toCharArray(); //Moved the declaration to the method scope 
      } 

     } 

    } 
    System.out.println(result); // error result cannot be resolved to a variable. 
    sc.close(); 
} 

是的,這已被提及,但解釋是不準確的,所以我覺得適合解決。

至於打印出的字符數組,你已經知道答案:System.out.println(char[] x)
來源:System.out
當然,除非你想把它當作一個字符串:new String(char[] value)

+0

不,我無法通過System.out.println(char [] x)打印字符數組。它會引發錯誤。 – Sneha

+0

如前所述,它不能看到字符數組「結果」,因爲它在嵌套的作用域中聲明,一旦程序離開該作用域,它會忘記該值,嘗試複製我提供的代碼示例並查看是否有效。 –