2016-01-24 120 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

如前所述,它不能看到字符数组“结果”,因为它在嵌套的作用域中声明,一旦程序离开该作用域,它会忘记该值,尝试复制我提供的代码示例并查看是否有效。 –