Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于在java中填充字符串[]_Java_Arrays_String - Fatal编程技术网

关于在java中填充字符串[]

关于在java中填充字符串[],java,arrays,string,Java,Arrays,String,我写了一个类并在类中声明了一个字符串[5];然后,我尝试在没有方法的情况下直接将值赋给类主体中的这个数组。我犯了很多错误。然后我尝试定义一个方法,稍后调用它来填充这个数组。这次没有错误。我不明白为什么我不能直接在类体中赋值,就像这样:aString[0]=“今天”。java新手。我知道我错过了一些重要的概念。我试着用谷歌搜索,但没有找到答案。请帮我解释一下 这不起作用: //: com/instar/Test1.java; //defining String[]; package com.ins

我写了一个类并在类中声明了一个字符串[5];然后,我尝试在没有方法的情况下直接将值赋给类主体中的这个数组。我犯了很多错误。然后我尝试定义一个方法,稍后调用它来填充这个数组。这次没有错误。我不明白为什么我不能直接在类体中赋值,就像这样:aString[0]=“今天”。java新手。我知道我错过了一些重要的概念。我试着用谷歌搜索,但没有找到答案。请帮我解释一下

这不起作用:

//: com/instar/Test1.java;
//defining String[];
package com.instar;
public class Test1{
    private static String[] bString = new String[5];
    bString[0] = "Today";
    bString[0] = "Today";
    bString[2] = " snowing";
    bString[3] = " and";
    bString[4] = "cold!";
    }
}
这项工作:

//: com/instar/Test1.java;
//defining String[];
package com.instar;
public class Test1{
    private static String[] aString = new String[5];
    private static String[] bString = new String[5];
    public void populateArray(){
        bString[0] = "Today";
        bString[0] = "Today";
        bString[2] = " snowing";
        bString[3] = " and";
        bString[4] = "cold!";
    }
}

在方法、构造函数或初始值设定项块之外不能有这样的语句

您可能需要静态初始值设定项

这应该起作用:

//: com/instar/Test1.java;
//defining String[];
package com.instar;
public class Test1{
    private static String[] bString = new String[5];
    static {
      bString[0] = "Today";
      bString[2] = " snowing";
      bString[3] = " and";
      bString[4] = "cold!";
    }
}
或者,尝试以下方法:

private static String[] bString = new String[]{"Today", " snowing", " and", "cold!"};
我不明白为什么我不能在类体中直接赋值

您可以在声明中使用正确的语法

private static String[] bString = new String[] 
{
    "Today",
    "Today",
    " snowing",
    " and",
    "cold!"
}

允许您在声明时为数组赋值。然而,通常情况下,您应该在构造函数中执行这类操作。也许您应该稍微阅读一下java教程。

赋值不允许在方法或构造函数之外,就像您不能在方法/构造函数之外调用
System.out.println(“”
)。(不完全确定原因,但我知道你不能。)

但是,你的问题有一个解决办法。我假设您希望静态地完成变量赋值,这样就排除了将赋值放在构造函数中的可能性。那么你可以做两件事:

首先,(可能是最简单的),可以使用数组常量。这些允许您在声明数组时设置数组的值。(但是只有在声明它们时才是)看起来是这样的:

public static String[] bString = {"Today", "Today", " snowing", " and", "cold!"};
public static String[] getMyStringArray() {
    static String[] bString = new String[5];
    bString[0] = "Today";
    bString[1] = "Today";
    bString[2] = " snowing";
    bString[3] = " and";
    bString[4] = "cold!";
    return bString;
}
不需要指定数组的大小,因为它是由数组常量中包含的元素数推断出来的

其次,您可以声明一个静态方法来为您执行此操作,它允许您使用赋值(因为它们被允许在方法中使用),如下所示:

public static String[] bString = {"Today", "Today", " snowing", " and", "cold!"};
public static String[] getMyStringArray() {
    static String[] bString = new String[5];
    bString[0] = "Today";
    bString[1] = "Today";
    bString[2] = " snowing";
    bString[3] = " and";
    bString[4] = "cold!";
    return bString;
}

我个人会使用第一个,因为在我看来它更容易和更干净

您的代码包含编译错误共享您的完整代码。几分钟前,有人问了这类问题。你也面临着同样的问题。请尽可能地阅读我的帖子:你应该明确你会遇到什么样的“错误”。这是ArrayIndexOutOfBoundsException吗?这是NullpointerException吗?这是代码编译错误吗?如果是,什么类型?请注意,在声明站点初始化时不需要
新字符串[]
。更清楚的是,Hanks正在创建一个新对象。它起作用了。我太笨了,忘了构造函数和初始值设定项块。@TwistedHeadow,这不太准确。这与构造函数无关,这是一个语法错误。问题在于,您试图直接在类主体中执行语句,而在Java中无法执行。您忘记了将静态代码放在“static{}”块中。我不是想吹毛求疵,但我想确保你真的理解问题所在:)谢谢,伙计,我明白你的意思。类主体中不允许直接执行赋值语句。我只是习惯了pythonsyntax@TwistedMeadow如果您来自Python,希望使用JVM语言,但不必使用Java,我建议您使用Scala。它比Java更类似于Python。此外,在这种情况下,它不需要“静态”块;)啊,你解释得很好,我不能提高投票率,因为我每天的投票限制都超过了。@sᴜʀᴇsʜᴀᴛᴛᴀ 事实上,我认为这并没有得到很好的解释,事实上说“在方法或构造函数之外不允许赋值”是不正确的。可以为类主体内的变量赋值。如果不将逻辑包装到“static{}”块中,就无法执行逻辑一个“数组常量”,因为它不是最终的,所以它不是常量。@torbinsky我指的是
{“今天”、“今天”、“下雪”、“冷!”}
作为我的数组常量。我之所以这样称呼它,是因为当您在eclipse中尝试在声明之外使用一个时,它会发布一个错误,说“不能在声明之外使用数组常量”。如果您的磁盘没有损坏,或者您的代码没有被修改,那么简单地编写上述内容是无法更改的,您也可以修改标记为
final
的任何内容。因此,从本质上讲,
{
}
之间的上述短语是一个常量(不变)值。@AndrewG啊,我明白了。谢谢你纠正我的错误。然而,我仍然认为这个答案总体上有点令人困惑和误导。特别是上一个代码示例,它有点脱离上下文,显示了如何声明静态方法,而没有显示如何实际使用它。我想说,以这种方式声明一个完整的方法来初始化变量不是一个好方法。