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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Java

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

Q&A

解決済

2回答

1778閲覧

Java for文が回りません

chocolate_pie

総合スコア26

Java

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

0グッド

0クリップ

投稿2020/01/08 14:27

編集2020/01/08 23:49

前提・実現したいこと

既存データの削除フラグをfalseにしてユーザid等を既存データから取ってきて新しいレコードを追加したいです。

for文の中にfor文を入れているので2次元配列の書き方が違うのかなと思いましたが、2次元配列はコードに含まれていませんでした。

発生している問題・エラーメッセージ

エラーメッセージ エラーメッセージはありませんがデバックをするとfor文がスキップされて処理されます。

該当のソースコード

java

1 @Scheduled(cron = " 0 0 0 1 4 *", zone = "Asia/Tokyo") 2 public String goalsReset() { 3 //年を取ってくる、Stringにする 4 Calendar calender = Calendar.getInstance(); 5 Integer intyear = calender.get(Calendar.YEAR); 6 String year = String.valueOf(intyear); 7 //時間を取ってくる 8 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); 9 10 //有効なユーザIDを全て取ってくる 11 List<UserMaster> userIdList = usermasterService.findAllValidUserId(); 12 //有効なユーザの数 13 int i = userIdList.size(); 14 //目標連番の数(5個作りたい) 15 int seq=0; 16 17 //idが持っている目標連番、明細、目標確認テーブルのdelete_flg=falseのものを全てtrueにする 18 for (UserMaster user : userIdList) { 19 20 //該当IDの人の有効な目標を取ってくる 21 List<GoalSeq> goalseqs = goalseqService.findCurrent(user.getId()); 22 23 //一個の目標のdelete_flgをtrueに変える 24 for (GoalSeq goalseq : goalseqs) { 25 goalseq.setDeleteflg(true); 26 goalseq.setUpdatedat(timestamp); 27 goalseq.getMeisai().setDeleteflg(true); 28 goalseq.getMeisai().setUpdatedat(timestamp); 29 goalseqService.save(goalseq); 30 } 31       //目標確認テーブルのdelete_flgをfalseにする→このメソッドまで正常処理 32 ReviewCks reviewcks = reviewcksService.findByEmpId(user.getId()); 33 reviewcks.setDeleteflg(true); 34 reviewcks.setUpdatedat(timestamp); 35 reviewcksService.save(reviewcks); 36 37 38//空の目標連番を5個作る 39//iがユーザの数 40 for (i=0; i< i; i++) { 41//iの値は正常に取れています 42//ここから下のメソッドが無効になる 43      //seqが目標連番 44 for(seq=0; seq<5; seq++) { 45 if (seq == 0) { 46 //reviewcks1は1つだけできればいいので一回目のみに作成 47 ReviewCks reviewcks1 = new ReviewCks(); 48 49 reviewcks1.setRvwuserid(user); 50 reviewcks1.setFirstcomp(false); 51 reviewcks1.setFirstcomptime(null); 52 reviewcks1.setMidcomp(false); 53 reviewcks1.setMidcomptime(null); 54 reviewcks1.setEndcomp(false); 55 reviewcks1.setEndcomptime(null); 56 reviewcks1.setYear(year); 57 reviewcks1.setCreatedat(timestamp); 58 reviewcks1.setDeleteflg(false); 59 reviewcks1.setUpdatedby(user.getId()); 60 reviewcks1.setUpdatedat(timestamp); 61 reviewcksService.save(reviewcks1); 62 } 63 GoalSeq goal = new GoalSeq(); 64 65 goal.setGoaltitle(null); 66 goal.setGoaldetail(null); 67 goal.setGoalweight(null); 68 goal.setYear(year);//1月2月3月だったら年-1 69 goal.setUserid(user); 70 goal.setGoalid(seq + 1); 71 goal.setUpdatedby(user.getId()); 72 goal.setCreatedat(timestamp); 73 goal.setUpdatedat(timestamp); 74 goal.setDeleteflg(false); 75 goalseqService.save(goal); 76 77 Meisai meisai = new Meisai(); 78 79 meisai.setGoalSeq(goal); 80 meisai.setSelfmidcmt(null); 81 meisai.setBossmidcmt(null); 82 meisai.setSelfendcmt(null); 83 meisai.setBossendcmt(null); 84 meisai.setFirstrvwck(false); 85 meisai.setMidrvwck(false); 86 meisai.setEndrvwck(false); 87 meisai.setUpdatedby(user.getId()); 88 meisai.setDeleteflg(false); 89 meisai.setUpdatedat(timestamp); 90 meisai.setCreatedat(timestamp); 91 meisaiService.save(meisai); 92 } 93 } 94 }

試したこと

・デバックしてどこのメソッドまで正しく処理されているか確認
・二次元配列の記述法を調べて試したが解決策が自分では見つけられなかった

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

JPA
MySQL
Spring4
を使っています。
Java初心者で至らないが多々あると思いますがよろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/01/08 17:38

> for分の中にfor文を書いているので2次元配列 for 分の数と配列とは関係ありません. 実際, ご提示のコードには2次元配列は見当たりません. > 正しい記述方法を知りたい 正しいものを探すのではなく, 間違っているものを探してください. 間違いを探して修正することがプログラムを動作させる基本的な作業です.
m.ts10806

2020/01/08 21:30

>Java SpringBoot タグにあるのでタイトルにわざわざ含む必要はありませんし、 そもそも今回Springそこまで関係ないのでは? 本当にforや配列の問題なのであればJava単体で考えたほうが良いと思います。
chocolate_pie

2020/01/08 23:54

jimbe様 ご指摘ありがとうございます。 投稿内容を修正させていただきました。 2次元配列についての理解が欠けていました。 また、プログラム修正の考え方をご教授いただきありがとうございます。
chocolate_pie

2020/01/08 23:58

m.ts10806様 ご指摘ありがとうございす。 m.ts10806様のおかげでこのメソッドではSpringが関係ないことに気づきました。 以後、関係ないツールはタイトルに書かないように気を付けます。 質問内容を修正させていただきました。
guest

回答2

0

Java

1for (i=0; i< i; i++) {

ii未満になることはありません。
i < i は常にfalseです。

投稿2020/01/08 14:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

他の人にあるように

Java

1for (i=0; i<i; i++)

がおかしいです

Java

1int i = userIdList.size();

と上部にあるので

Java

1for (int cnt=0; cnt<i; cnt++)

としてみてはどうでしょうか。

投稿2020/01/09 00:36

homu_homu_ai

総合スコア96

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chocolate_pie

2020/01/09 02:38

iをユーザの数に設定していたので、他の変数を作って条件を書かないとfalseになってしまうことに気づきませんでした。初歩的なミスです。 homu_homu_ai様の例にならって書いたらfor文が回りました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問