質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.26%

  • Java

    10832questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列への連番の格納(Java)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 122

sheep85

score 1

Java勉強し始めた初心者です。ご教授ください。

前提・実現したいこと

配列へ連番の格納
1から100までの値を配列に格納したいとき
int[] array = {1.2....100};
と書くのは非常に面倒に思い試行錯誤していましたが
詰まってしまいましたので質問しました。

試したこと

for文を使って格納できないか試していたのですが、中々上手くいきませんでした。
無理やり(ここでは1から10までの連番)

public class Test{
    public static void main(String[] args){
        int i;
        int[] array;
        array = new int[10];
        for(i=0;i<9;i++){
            array[i]=i+1;
        }
    }
}    

と格納することは出来たのですがどうにもスマートさにかけるような気がしてなりません。

他にこのような方法がある、もしくはこうすれば短く書ける、など
よろしければご教授ください。

補足情報(言語/FW/ツール等のバージョンなど)

java

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

maisumakunさんの回答は一番スマートだと思います。
しかしながらこれは変数の宣言や初期化、ループの書き方、様々なAPIを使いこなせるという段階になってから書くようにしても遅くないと思います。

最初は以下のようなコードが書ければまずはよいのでは?

public class Test{
  public static void main(String[] args){
    int[] array = new int[10];
    for (int i = 0; i <= array.length; i++) {
      array[i] = i + 1;
    }
  }
}   
  1. 初期値を与えないローカル変数宣言は避ける
    そのような変数宣言は往々にして「必要になるより以前に宣言」することになり、不必要に広いスコープを持つことになりがちです。本件でいえばiはforループ以外に必要ありませんので上記のように書く習慣にした方がよいでしょう。またarrayの宣言直後に代入するより宣言と同時に初期値を与える方がたいていの場合、短く分かり易いコードになると思います。

  2. for文の終端判定
    forループの終了判定をi < 9としていますが、これでは最後の要素が0のままです。N回の繰り返しにforループを用いるならfor (i = 0; i < N; i++)と書く人が多いと思います。

  3. 配列の要素数で決まる値にリテラルを使わない
    本件のループは本質的に(A)「配列の要素数だけ繰り返す」のが目的であって(B)「10回繰り返す」とやってしまうと「繰り返したいのが配列の要素数なのか、先頭の10要素だけなのか」が不明瞭になります。本件の場合は(A)が目的なのですから、i < array.lengthと書く方が合理的です。

このような点に配慮できているコードが「スマート」の第一段階ではないでしょうか?


ちなみに目的により「どう書くべきか」は様々に変化します。なぜそう書いたかを自分や他者に納得いくように説明できるようになるとコードは自然にスマートになっていく気がします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/09 13:01

    ありがとうございます!
    i < array.length
    というやり方はなるほどその通りだと思いました…!
    i < 9では間違ってましたね…
    人間の記述ミスを防いで行くよう気をつけるのもポイントなんですね…


    後々の修正も考えるとスマートだと思います…
    レベルに合わせていただき助かりました…!

    スコープ、初期化に関してまだ理解が浅いので気をつけて勉強したいと思います!
    ありがとうございました!

    キャンセル

+2

Java8であれば、Stream APIで生成できます。

// 1~100まで
int[] arr = IntStream.rangeClosed(1, 100).toArray();

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/09 10:51

    ありがとうございます!
    APIの使用についてはまだ分からない部分も多かったですが、無事思ったとおり格納することができました。

    格納する際、配列の宣言と初期化を同時に行いたかったということが上手く言い表せていませんでした。
    勉強を続けたいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.26%

関連した質問

  • 解決済

    Java if文を多様しないで組みたい

    現在Javaにて名前と科目を入力したら登録した点数がでるプログラムを組んでいます。 エラーは無いのですがif文を多様してしまっているのでif文をあまり使わずに作りたいです。

  • 解決済

    100になる直前の加算結果出力

    javaで開始値と終了値を入力してその間の偶数を加算していき、合計が100を超えたら「数値が100を超えたため、処理を中止します。」とメッセージを出し、かつ合計が100になる前の加

  • 解決済

    メソッド flu_in_tokushima() を改良し, flu_in_tokushima() 内...

    class Flu { static int initial = 10; public static void main(String args[]){ int n,d;

  • 解決済

    javaについて

    javaについて質問です。情報処理検定第53回のプログラミング部門1級のjavaの問題をやっているんですけど、そのjavaに平均値を追加したいです。どのように追加すれば良いのでしょ

  • 受付中

    ArrayListについて

    ArrayListについて質問です ArrayList<String> array = new ArrayList<String>(); array.add("日本");

  • 解決済

    JFrameでのJPanelの切り替えについて

    前提・実現したいこと (例)Java(UIはJFrame)でゲームを作っているのですが、JPanelの切り替えをJFrameで行おうとしています。 しかし、JPanelの切り替

  • 解決済

    繰り返し処理について

    javaのプログラムの勉強をしているのですが、結果が112123になる意味が分かりません。最初のwhileでtrueを返して1が表示されて、インクリメントされてるんで、iは2になっ

  • 受付中

    あらかじめ用意されている100個のデータのヒストグラム作成方法

    100個のデータがテキストで用意されていて、そのデータからビン幅5ずつで155から190までのヒストグラムを作成したいです。そのときのヒストグラムは*で表したいです。 回答よろしく

同じタグがついた質問を見る

  • Java

    10832questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。