2

ファイルからロードされた約100行を含むString[]LinesFromFileがあります。

LinesFromFile[0]は「Line1」です

LinesFromFile[1]は「Line2」です

LinesFromFile[2]は「Line3」です

..。

LinesFromFile[99]は「Line100」です

ここで、新しいString [] SomeLinesFromFileを作成し、この変数にLinesFromFileの行の一部を割り当てます。

私はそれが次のように単純だっただろうと思ったでしょう:

String[] SomeLinesFromFile = null;
int offset = 45;

for (i = 0; i < 10, i++)
{
    SomeLinesFromFile[i] = LinesFromFile[offset + i];
}

このコードは、LinesFromFile[46]からLinesFromFile[56]までの値でSomeLinesFromFile[0]をSomeLinesFromFile[9]に設定すると想定していました。

これをAndroidデバイスで実行しようとすると、クラッシュします。ここで何が欠けていますか?

4

7 に答える 7

10
String[] SomeLinesFromFile = null;

SomeLinesFromFileであるnullため、次のことはできません。

SomeLinesFromFile[i] = ...

最初に配列を作成する必要があります。例:

String[] SomeLinesFromFile = new String[10];


ちなみに、変数に大文字で始まる名前を付けるのは悪い習慣と考えられています。したがって、常にsomeLinesFromFileの代わりにを使用する必要がありSomeLinesForFileます。

于 2012-04-30T22:18:24.990 に答える
1

2番目の配列はnullです。正しい次元で初期化します(この場合は10で十分です):

String[] SomeLinesFromFile = new String[10];
int offset = 45;

for (i = 0; i < 10, i++)
{
    SomeLinesFromFile[i] = LinesFromFile[offset + i];
}
于 2012-04-30T22:19:28.007 に答える
1

これを変える:

String[] SomeLinesFromFile = null;

これに:

String[] SomeLinesFromFile = new String[10];
于 2012-04-30T22:20:08.407 に答える
1

代わりにArrayListを使用して、固定サイズを回避することができます。

http://www.java-tips.org/java-se-tips/java.lang/use-of-arraylist-class.html

于 2012-04-30T22:20:30.340 に答える
1

文字列配列を初期化するのを忘れました:

String[] SomeLinesFromFile = new String[10];
于 2012-04-30T22:21:49.097 に答える
1

SomeLinesFromFile[i]は存在しません。SomeLinesFromFileがnullに設定されています。あなたはこのようなことを試すことができます:

String[] SomeLinesFromFile = new String[0];
String[] Temp = null;

int offset = 45;

for (i = 0; i < 10, i++)
{
    Temp = new String[SomeLinesFromFile.length +1];

    if(SomeLinesFromFile.length>0){
        System.arraycopy(SomeLinesFromFile, 0, Temp, 0, SomeLinesFromFile.length;
    }

    Temp[i] = LinesFromFile[offset+i];
    SomeLinesFromFile = new String[Temp.length];
    System.arraycopy(Temp, 0, SomeLinesFromFile, 0, Temp.length);
}

それは少し大まかなスケッチなので、私が見逃したことがあるかもしれませんが、それがその要点です。それを行うためのより良いまたはより簡単な方法があるかもしれませんが、それは私が思いつくことができるものです。必要に応じて、 arraycopyに関するドキュメントをご覧ください。基本的に、新しい情報を取得する一時配列があります。次に、それを他の配列に格納して、より多くの情報を取り込むための新しい一時配列を作成できるようにします。

于 2012-04-30T22:38:04.993 に答える
0

SomeLinesFromFileですnull(おそらくログで確認できます)。ちなみに、代わりにLinkedListやArrayListなどのリストを使用することをお勧めします。メソッドの使用が完了したら、それらを配列に変換することもできますtoArray()

于 2012-04-30T22:19:51.900 に答える