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

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

ただいまの
回答率

90.34%

  • Java

    14414questions

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

  • for

    257questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

For文を用いた繰り返し構文について

解決済

回答 2

投稿 編集

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

nontan

score 2

for文を使って配列になっている数字を計算して結果を出すプログラムを作っているのですが様々なサイトや教科書を見ながら組んでいるのですがどうやっても理解できないところがあるので答えを教えてとまでは言いませんがわかりやするといていただけると助かります。

 該当のソースコード

コード

public class Question01 {

    public static void main(String[] args) {
        System.out.println(sum(1, 10));
        System.out.println(sum(-5, 10));
        System.out.println(sum(10, 20));

    }
    private static int sum(int start, int end) {
           for(int i=0;i<sum.lenght;i++){
             //処理がわからない
}

    }

}

 試したこと

4~6段目までのsum()と9段目の(int start,int end)が関連付いていることはわかるのですがここからforですぐにループさせて計算させた方がいいのか、それとも(int start,int end)をなにか別の型に変換して解いていった方がいいのかわかりません。

 追記

LouiS0616さんに助言いただきましたことを試しに自分なりにコードを組んでみたのですが今度はシンボルが見つかりませんとなってしまいました...

public class Question01 {

    public static void main(String[] args) {
        System.out.println(sum(1, 10));
        System.out.println(sum(-5, 10));
        System.out.println(sum(10, 20));

    }
    private static int sum(int start, int end) {
             int total;
              total = 0;
           for(int i=0;i<sum.length;i++){
               total +=i;
}
         return total;

    }

}

エラーコード

Question01.java:12 シンボルを見つけられません。
シンボル: 変数 sum
場所: Question01のクラス
for(int i=0;i<sum.length;i++){

sumになにかしらダメなところがあるのは理解しているのですが、何がだめでどう改善するとエラーじゃなくなるのかがわかりません

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/04/18 12:46

    プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)正しく反映されているかどうかは質問編集画面のプレビューを見ながら編集していってください。

    キャンセル

回答 2

+4

sumメソッドの中身に問題ありです。
単にstartからendまでカウンタを回して、値を足していけば良いです。

private static int sum(int start, int end) {
    totalを宣言、0で初期化;
    for(iをスタートからエンドまで回す) {
        totalにiを足す;
    }
    return total;
}

追記を受けて

逆になぜsum.lengthで巡回できると思ったのかお聞きしたいです。
それは配列の長さの属性で、配列自体が存在しないのに使えるはずがないのです。

for文の最も基本的な書き方を復習してください。

コードの書き方について

teratailには、上記のようにコードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Java

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/18 13:29

    回答ありがとうございます!私としては4~6段目のsum()のところを配列と勘違いして解釈していたもので、それでできるかなと思い込んでいました・・・
    わかりやすいご指摘ありがとうございます!

    キャンセル

  • 2018/04/18 13:31

    その部分はメソッドの呼び出しをしている部分ですね。
    変数やメソッドに対する基礎的な知識が不足しているようですので、丁寧に復習するようにしてくださいね。

    キャンセル

  • 2018/04/18 13:33

    わかりました!復讐する箇所まで教えていただきありがとうございます!
    しっかり勉強させてもらいます!

    キャンセル

checkベストアンサー

+1

戻り値である変数sumにfor文で回す変数iをすべて足してあげます。

public class Sum {

    public static void main(String[] args) {
        System.out.println(sum(1, 10));
        System.out.println(sum(-5, 10));
        System.out.println(sum(10, 20));

    }
    private static int sum(int start, int end)
    {
         int sum = 0;
         for(int i = start; i <= end;i++){
             sum += i;
         }

         return sum;
    }
}


出力結果

55
40
165

<追記> メソッドを戻り値なしのvoidの形で書く方法です。

public class Sum {

   public static void main(String[] args) {
        sum(1, 10);
        sum(-5, 10);
        sum(10, 20);

    }
    private static void sum(int start, int end)
    {
         int sum = 0;
         for(int i = start; i <= end;i++){
             sum += i;
         }

        System.out.println(sum);
    }
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/18 13:26

    ありがとうございます!すごくすっきりしました!
    参考までに教えていただきたいのですが、startとendはint sumの文で数値として認識されていたという解釈で宜しいでしょうか?

    キャンセル

  • 2018/04/18 13:29

    はい、そうです。
    startとendは「int型」のsumというメソッドの引数です。
    ですので、sumというメソッドの中で使われる「数値」です。

    キャンセル

  • 2018/04/18 13:31 編集

    メソッドの戻り値をintではなくvoidにする方法もあります。こちらも載せておきます。

    キャンセル

  • 2018/04/18 13:32

    ありがとうございます!
    これからの勉強の参考になりました!

    キャンセル

  • 2018/04/18 13:36

    すいません。言い間違えました。
    「メソッドの戻り値をintではなくvoidにする方法もあります」ではなく
    「メソッドの戻り値がないvoidにする方法もあります」でした。

    キャンセル

  • 2018/04/18 13:37

    メソッドを戻り値のあるintの形にするか 戻り値のないvoidの形にするかは
    そのあとの処理によって場合分けが必要です。

    キャンセル

  • 2018/04/18 13:38

    また、質問欄に書いてある、sum.length()というのは
    もし、sumという名の配列があったときの要素数です。

    キャンセル

  • 2018/04/18 13:41

    別の回答もあるのですね、参考になります!
    lengthについてはLouiS0616さんのかいとうで理解できました!

    キャンセル

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

  • Java

    14414questions

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

  • for

    257questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。