Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Arrayのlengthがわからないのに値を代入したい

double[] d;
があります。これに、forループを使って上から一つ一つ値を代入していきます。いつループが終わるかは分かりません。(while()の条件が外れたときにループが終わるとしよう)

プログラムをrunするときは、d.length()がわからないので、このままではエラーになってしまいます。

どのようにすれば解決できますか、あるいはどこを参照すればいいか教えて下さい。Array全般について読んだのですが、この問題についてはなかったです。

15

回答

78737

閲覧

15件の回答

評価

0

>Array全般について読んだのですが、この問題についてはなかったです。
[]の配列にこだわるから、答えが出なくなります。
あるものにその機能がなければ、別のものを使って実現できないのかな?と考えましょう。

「可変長配列 java」とか、検索してみれば、見つかるでしょう。

評価

0

>いつループが終わるかは分かりません。

これについては理解できます。

>プログラムをrunするときは、d.length()がわからない

これは理解できないです。
たぶん"double[] d;"が既に存在(用意)されていることを言っているのだろうと思うし・・。
(既に確定しているd.length()に対して、何時ループが終了するかが判らない・・d.length()を越えるかもしれないし、越えないかもしれない・・ということなら理解できますけど)

>Array全般について読んだのですが、この問題についてはなかったです。

Arrayって、"double[]"と変わらない実装だった筈と思うので、Javaに実装されたクラスとしては遠いと思います。
(コードを書けはできるけど、そんなことしなくても使い易いクラスが用意されている)

mioさんもレスされているように、その要素数が"可変"であることに着目して調べて行くといいでしょう。
定石のように例もついて、多く見つかると思います。

評価

0

Vectorを使ってやることにしました。

ありがとうございます。

評価

0

惜しいです。
Vectorは「古い種族」なので、これから作るなら代わりに「List」を使いましょう。

評価

0

Listを使うことにしました。ありがとうございます。確かに、メソッドなども充実していますね

評価

0

すみません、また問題が発生してしまいました。

Listを使ってやりました。

それをdouble []に変えるのに苦労しています。forループを使えばできるのですが、これよりもいい方法あるはずだと思って。結構大きいListなので、forはあまり使いたくないです。

ListクラスをString[]かObject[]に変えるメソッドはあるのですが、それでもString[]をdouble[]に変える方法が見つかりません。

何かいい方法がなければ、forでやります。

評価

0

Vectorはクラスですが、Listクラスではなくインターフェイスですよね?
Listクラスとして見ているとすれば、またそれは別物なのかも?

APIリファレンスのjava.util.Listを隅々まで見れば答えは見つかる筈。
或いは、例とか見ているのであれば、出てきていたりもするでしょう。
リファレンスにはListインターフェイスを実装したそのまま使えるクラス群も(abstractも出てくるので"も")出ていたりします。

評価

0

>forループを使えばできるのですが、これよりもいい方法あるはずだと思って。
Listは、正確にはクラスの可変長配列なのです。
double型は、Double型として格納されます。
ですので、Double[]を返すことはできますが、double[]を直接返す方法はありません。

標準以外では、

http://fastutil.dsi.unimi.it/docs/it/unimi/dsi/fastutil/doubles/DoubleArrayList.html

のように独自にListを実装したものも、存在します。
が、中では結局同じことをしています。

評価

0

Listはinterfaceとクラスがあって、僕が使っていたのはクラスの方です。

interface Listの方でもあまり使えそうなのはみあたらないですが、余裕でき次第しっかりみたいと思います。

評価

0

>double型は、Double型として格納されます。

あぁ・・ そういうことなのね。
失礼しました。

好みってのも出てくるでしょうけど、
ふとそならJakatraにあったりしないのかな?と思ってjakarta commonsを見てみたら、commons langというのにあるみたいではありますね。

もっともArrayUtilsは名前の通りユーティリティで、単体ではListと合わせてとかのものにはならないですけど。

評価

0

>Listはinterfaceとクラスがあって、僕が使っていたのはクラスの方です。

え!?
それって、java.awt.Listとかだったりしないんでしょうか?
だとすると、余計な実装は多く含まれていたりはしますが、一応、目的を果たせなくはないでしょうけど、Listインターフェイスより柔軟性とか少しやれることは減るのでは・・。
java.awt.List自身が使われる場面で・・というのならありかも知れませんけど・・。

評価

0

>Listはinterfaceとクラスがあって、僕が使っていたのはクラスの方です。

通常使うのはjava.util.Listのインターフェースです。

List list = new ArrayList();
list.add("A");
list.add("B");

for (Iterator i = list.iterator(); i.hasNext();) {
  System.out.println(i.next());
}

上記のように使うかと・・・

クラスのListってjava.awt.Listですよね。java.awt以下にあるクラスはグラフィックスとイメージのペイント用のクラスなので使わないと思います。

評価

0

java.awt.Listの方でも一応、toArrayとかというメソッドがあって、使ってみたのです。

Jakartaと見てみます。

評価

0

# ふとそなら・・

"れ"がない"れ"が・・
最近なんかキーミス多い気がするけど・・

# ふとそれなら・・
でした。

評価

0

>java.awt.Listの方でも一応、toArrayとかというメソッドがあって、使ってみたのです。

既に名前も挙がってますけど、GUIとか話の中には出てきてないし、Listインターフェイスと、たぶん一般的としてArrayListで見てくださいね。
(既に書いた通りjava.awt.Listでもできなくはないだろうけど、用途が違うし、実際には扱い難い筈です。
まして、自分の中のコードで済ませるなら未だしも、外には出せないです・・人に話すときとか、仕事とか)

あと、ArrayUtilsについては、それを使うつもりであるとすれば、forループとかを省けるだけで、ListインターフェイスやArrayListクラスは必要ですから。

逆にmioさんが挙げてくださっているのは、それらをDoubleArrayListクラスひとつで全てやってくれます。
が、doubleに特化されているというのもありますけど。
好み次第でこれもいいと思いますし(仕事上の話だと利用許可,不許可とか絡んできたりもするでしょうけど・・それはArrayUtilsとかでも同様に)、
勉強として、ArrayListを元に自分でクラスを書いてみるのもいいかも。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。