ホームページ  >  記事  >  指定した範囲の 11 桁のシリアル番号を生成するにはどうすればよいですか?

指定した範囲の 11 桁のシリアル番号を生成するにはどうすればよいですか?

王林
王林転載
2024-02-12 14:27:05720ブラウズ

質問内容

指定されたコードを使用して、リストビューで特定の範囲の11桁までのシリアル番号を生成しています。最大 10 桁の場合、生成されるシーケンスは 0333624140 ~ 0333624160 のようになります (例: 0333624140、0333624141、0333624142、0333624143 など)。ただし、必要な値を 03336241441 ~ 033362414 のように 11 桁に変更すると、 50 の場合、アプリケーションがクラッシュします。

btngenerate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        int value1;
        int value2;
        value1 = Integer.parseInt(txtfirst.getText().toString());
        value2 = Integer.parseInt(txtsecond.getText().toString());
        for(int i=value1;i<=value2;i++){
            list.add(""+i);
            li.setAdapter(arrayAdapter);
        }

    }
});

解決策

私は、みんなの助けを借りて、自分で必要な解決策を見つけました。他の人がそれに関する情報を入手できるように、ここにそれを示します。とにかく、心の底からありがとう~

btngenerate.setOnClickListener(new View.OnClickListener() {
    @SuppressLint("DefaultLocale")
    @Override
    public void onClick(View view) {
        try {
            long value1;
            long value2;
            value1 = Long.parseLong(txtfirst.getText().toString());
            value2 = Long.parseLong(txtsecond.getText().toString());

            for(Long i = (Long) value1; i<=value2; i++) {
                list.add(String.format("%011d", i));
                li.setAdapter(arrayAdapter);
            }

        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }
});

これは、このコードの書き方に関して完全に壊れたアイデアです。 11 桁の長さのすべての数値を含めることができる配列を作成しています。それは110億アイテムです。たとえ各オブジェクトが 8 バイト (値に 4 バイト、参照に 4 バイト。それ以上になるでしょう) しか占有しないとしても、それは 880 億バイト、つまり約 9.5 GB になります。それは決して記憶に収まらないだろう、その前に、あなたはもうどうしようもないでしょう。

これを行う方法はたくさんあります。アダプターは、連続した範囲であるため、すべての項目を含む配列を必要としません。開始インデックスと終了インデックスのみが必要で、各インデックスの値は開始インデックスとオフセットに基づいて計算できます。ただし、すべての値のリストを作成することは機能しません。

以上が指定した範囲の 11 桁のシリアル番号を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。