为什么我得到变量未初始化错误?

时间:2020-08-15 15:30:53

标签: java string replace java.util.scanner

我正在尝试将所有字符从字符串转换为2D字符数组。详细信息如下:

我的代码:

import java.util.*;
public class Main
{
    public static void main(String[] args) {
        //System.out.println("Hello World");
        Scanner sc=new Scanner(System.in);
        int n,l=0;       //as you can see, n is initialized
        String x="";
        char[][] arr1=new char[10][10];
        if(sc.hasNextInt())
            n=sc.nextInt();
        for(int i=0;i<n;i++){
            if(sc.hasNextLine())
                x=sc.nextLine();
            //char[] arr=x.toCharArray();
            if(x.length()==n){
                   for(int j=l;j<arr1.length;j++){
                       for(int k=0;k<arr1.length;k++){
                           arr1[j][k]=x.charAt(i);
                       }
                       x="";
                       ++l;
                       break;
                   }
            }
        }
        System.out.println(arr1);
    }
}

错误:

error: variable n might not have been initialized
        for(int i=0;i<n;i++){

这是什么?变量n已被初始化。我该如何解决?

2 个答案:

答案 0 :(得分:4)

您只能将char替换为char,或者将CharSequence替换为CharSequence(因为这是为String#replace定义的唯一重载),而不是带有char的{​​{1}}。使用String将第一个参数转换为String(即CharSequence)将解决此问题。

String.valueOf

答案 1 :(得分:0)

如果允许您使用Java 8流API,则方法simplify可能如下所示:

  • 使用流reduce操作在输入数组中加入字符串
  • 使用带正则表达式的String replaceAll方法,将所有先前检测到的字符替换为空文字:
public static String simplify(String... arr) {
        
    return Arrays
            .stream(arr)
            .reduce("", // empty accumulator
                (s1, s2) -> s1 + (s1.isEmpty() ? s2 : s2.replaceAll("[" + s1 + "]", ""))
            );
} 

测试:

System.out.println(simplify("abcdef", "fghij"));
System.out.println(simplify("abcdef", "fghij", " jklmn"));

输出

Online demo

abcdefghij
abcdefghij klmn