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

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

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

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

2236閲覧

検索で該当するものがない場合、即文字列を反映させたいです。tu

chachachamaru

総合スコア4

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/05/08 02:52

編集2020/05/08 12:50

やっていること
登録商品の登録・編集・消去などができるコンソールアプリをつくっています。
今回質問させていただくのは編集部分となります。
Main.javaにて、変更したい登録商品名・変更後の名前を聞いて、Editクラスにて編集を行います。

聞きたいこと・困っていること
編集したい商品を打ち込む際に、該当するものがない場合result == ""で"編集する商品が見つかりませんでした”と表示されるようになっています。
しかし、「編集する商品が見つかりませんでした」が表示されるのが
すべての入力項目(編集したい登録名・新しい登録名・新しい価格などMainで聞いてることすべて)の入力終わった後に「編集する商品が見つかりませんでした」と表示される現状です。

これを、編集したい登録商品名を入力して、合致するものがないとわかった場合、新しい商品名などつぎの項目入力にすすむことなくすぐに「編集する商品が見つかりませんでした」と出したいです。どのように変更すればよいのでしょうか?

【現在】
編集したい登録商品名の文字列を入力してください
hh(登録されてない文字列を入力)
新しい商品名を入力してくださいとすべての入力項目終了後
編集する商品が見つかりませんでした

【このように変更したい】
編集したい登録商品名の文字列を入力してください
hh(登録されてない文字列を入力)
編集する商品が見つかりませんでした

**Main.java** if(sentaku ==3) { Scanner editword = new java.util.Scanner(System.in); String editname; do { System.out.println("編集したい登録商品名の文字列を入力してください"); editname = editword.nextLine(); }while(editname.isEmpty()); String changename; do { System.out.println("新しい商品名を入力してください"); changename = editword.nextLine(); }while(changename.isEmpty()); int changemoney; while(true) { try { System.out.println("新しい値段を入力してください"); changemoney = editword.nextInt(); break; }catch(InputMismatchException e) { System.out.println("文字列が入力されました。"); editword.next(); } } String changekari; do { System.out.println("仮の場合は1を本登録の場合は2を入力してください。"); changekari = editword.next(); if(changekari.equals("1")) { changekari="仮商品"; }else { changekari="本登録商品"; } }while(changekari.isEmpty()); Edit.Changeproduct(editname,changename,changemoney,changekari,list);
public class Edit { public static void Changeproduct(String editname,String changename,int changemoney,String changekari,ArrayList<HandMadeGoods> list) { String result = ""; File file; PrintWriter pw = null; for(int i=0; i<list.size(); i++) { if(editname.equals(list.get(i).getName())) { list.get(i).setName(changename); list.get(i).setMoney(changemoney); list.get(i).setKari(changekari); result +="商品名:"+list.get(i).getName()+"価格:"+list.get(i).getMoney()+"仮番号:"+list.get(i).getKari()+"で編集完了しました。"; try{ file = new File("src\HandMadeData.txt"); pw = new PrintWriter( new BufferedWriter(new FileWriter(file)) ); for(int y=0; y<list.size(); y++) { pw.println("商品名:"+list.get(y).getName()+"/"+list.get(y).getMoney()+"円/"+list.get(y).getKari()); } }catch(IOException e){ System.out.println("該当ファイルがありません。"); }catch(NullPointerException e){ System.out.println("nullです。"); }finally { pw.close(); } } } if(result == "") { result = "編集する商品がみつかりませんでした"; } System.out.println(result); } }
**追記 checkcheck** public static boolean checkcheck(String editname,ArrayList<HandMadeGoods> list,boolean checkgo) { for(int t=0; t<list.size(); t++) { if(!(editname.equals(list.get(t).getName()))){ System.out.println("編集したい商品に合致するものはありません"); checkgo=false; } } return checkgo; } **追記 main** Scanner editword = new java.util.Scanner(System.in); String editname; boolean checkgo=true; do { System.out.println("編集したい登録商品名の文字列を入力してください"); editname = editword.nextLine(); }while(editname.isEmpty()); Edit.checkcheck(editname,list,checkgo);

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

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

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

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

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

guest

回答1

0

ベストアンサー

if文の修正レベルでなく、処理フローを変更する必要があるのですが・・・
そこは理解できてますか?
そもそも、Changeproductを呼ぶタイミングがもろもろの入力の後なので。

”編集したい登録商品名の文字列を入力してください”

で、文字が入力されたらチェックをする必要があります。

ですが、Changeproductは、名前以外の入力も必要なので、これとは別に
新しい検索処理を作成する必要があります。


追記に対応

戻り値を受けて処理を迂回すればよいです。Mainを完全に把握してるわけじゃないので
イメージレベルで

java

1**Main.java** 2 3if(sentaku ==3) { 4 Scanner editword = new java.util.Scanner(System.in); 5 String editname; 6 do { 7 System.out.println("編集したい登録商品名の文字列を入力してください"); 8 editname = editword.nextLine(); 9 10 }while(editname.isEmpty()); 11 12 if(Edit.checkcheck(editname,list,checkgo)) { 13 // 元の質問にあった、続きの処理をこのブロックに書けばよいです。 14 String changename; 15 do { 16 System.out.println("新しい商品名を入力してください"); 17 changename = editword.nextLine(); 18 }while(changename.isEmpty()); 19 20 // 以降省略 21 }

Mainの中身しだいですが以下のように書けるかもしれません。
ネストが深くならないので、こちらの方が好みです。
とはいえ、Mainの作りしだい。

java

1 if(!Edit.checkcheck(editname,list,checkgo)) { 2 return; 3 } 4 // 以降は元の質問にあった、続きの処理

あと今回のようなメソッドは戻り値を引数で受け取る必要はありません。

処理で気になったのは、見つからない場合っていうのは全てがequalsでfalseになった場合じゃないですかね?
listの中身がよくわかってないですが、1つでも違うと見つからないになるとしたら
ほぼほぼ合致しない(Listの中身が全て同じ?)ことになりますけど・・・

java

1public static boolean checkcheck(String editname,ArrayList<HandMadeGoods> list) { 2 for(int t=0; t<list.size(); t++) { 3 if((editname.equals(list.get(t).getName()))){ 4 // 一致したらtrueで終了 5 return true; 6 } 7 } 8 // 全て合致しなかった場合 9 System.out.println("編集したい商品に合致するものはありません"); 10 return false; 11}

投稿2020/05/08 05:06

編集2020/05/08 14:28
momon-ga

総合スコア4820

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

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

chachachamaru

2020/05/08 06:15 編集

回答ありがとうございます。なるほど...勉強不足な点、失礼いたしました。文字列が入力されたらチェックができるように、mainの”編集したい登録商品名の文字列を入力してください” のdowhileが終わったすぐ下にCheckedit.checkcheck(editname,list);というメゾット(中身はfor文で回しながら同意する名前があるかをさがす)を持ってきてみました。この処理が終わった後、ちゃんと合致しませんでした。と表示されまた続きの処理(mainのつぎの質問)に戻っています。メゾット内の処理が終わったので続きの処理に戻るのは承知の上で聞きたいのですが、このcheckcheckメゾットに入った場合(sentaku ==3)の処理を終わらすにはcheckcheckメゾットにどう記述すればよいのでしょうか?重ねての質問になりますがよろしくお願いいたします。
momon-ga

2020/05/08 06:28

checkcheckに戻り値をつけてください。 戻り値によって、処理を続行するかどうかをifで判定すればよいです。
chachachamaru

2020/05/08 10:06

回答いただいてから今までいろいろやってみたのですがreturnの使い方が間違っているのかうまくいかないので、どのようにして記述すればいいかご教授いただけますでしょうか?javaを学び始めてから1か月も経ってないため経験が少なく申し訳ないです。よろしくお願いいたします。
momon-ga

2020/05/08 11:56

質問を最新化してください。(うまくいかないコードを載せてください)
chachachamaru

2020/05/08 12:54

追記にて行ってみたコードを載せさせていただきました。falseになったら(sentaku ==3)を終了させると考えてみたのですが、mainでどう指示してよいかわからずに迷っています。またreturn文の使い方も間違っていましたらご指摘ください。
chachachamaru

2020/05/08 15:22

本当に丁寧に解説いただきありがとうございました。無事、やりたいことにたどり着くことができました。今回ご教授頂いたことで、多くのことを学べましたこと感謝しております。また、何度も質問に答えて下さり助かりました。ありがとうございます!ここからまた励んでいきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問