• 締切済み

初心者です:指定金額以上の商品だけを表示させるソースがどうしてもわかりません

プログラミング自体が初心者の者です。 ドスプロンプト画面を表示させ、指定した金額を入力してエンターおすと 指定した金額以上の商品情報だけを元データのCSVファイルから出力させたい内容です。 また、出力は ●二列目:品名 ●三列目:概要 ●四列目:単価 だけを表示させます。CSVには一行ごとにひとつの商品が記載されています。 以下まではできたのですがこのあとどう書いたらよいかわかりません。アドバイスいただけたら助かります。 金額欄はCSVの四列目にあるのですが、この四列目だけをStringからintに変換しないと金額の判定をJavaがわからないんだろうか?と思ったりしますがわかんなくなりました。プログラミングというものは何やら難儀です。。。 ※catch(Exception e)は学習の主題ではないのでこのままで結構です。 ■ファイル1:CSVprac.java ※Tabでインデントしても投稿の確認画面ではインデントが反映されないです。  なんでかな。これではソースがみにくいだろうなぁ。。。投稿完了したらインデントが反映されていると信じて・・・ ------------------------------------------------------ import java.io.*; public class CSVprac { public static void main(String args[]) { String [][] slist = new String [1000][5]; int kibougaku,pos; int gyou; /* 配列の行の変数 */ gyou = 0; int i; String str; try { BufferedReader in = new BufferedReader (new FileReader("syohin.txt")); while((str = in.readLine()) != null) { pos = str.indexOf(','); slist[gyou][0] = str.substring(0,pos); str = str.substring(pos+1); pos = str.indexOf(','); slist[gyou][1] = str.substring(0,pos); str = str.substring(pos+1); pos = str.indexOf(','); slist[gyou][2] = str.substring(0,pos); str = str.substring(pos+1); pos = str.indexOf(','); slist[gyou][3] = str.substring(0,pos); str = str.substring(pos+1); slist[gyou][4] = str; gyou++; } in.close(); BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); System.out.println("何円以上の商品を見ますか?(金額を数字のみで入力ください)"); i = Integer.parseInt(br.readLine()); //ここからがわからない。 System.out.println( ); } catch(Exception e) { System.out.println(e); } } } ------------------------------------------------------ ■ファイル2:syohin.txt ------------------------------------------------------ 3,20型カラーテレビ,テレビ,17550,415 4,20型ステレオカラーテレビ,テレビ,23220,25 5,石油ファンヒーター,冷暖房器,14130,340 7,25型ステレオカラーテレビ,テレビ,34020,610 8,デスクトップパソコン,OA機器,115200,30 10,ノート型パソコン,OA機器,214200,60 12,BS内蔵25型カラーテレビ,テレビ,44820,500 13,230リットル2ドア冷蔵庫,家電,35820,820 14,250リットル3ドア冷蔵庫,家電,53820,540 15,350リットル3ドア冷蔵庫,家電,71820,810 16,377リットル4ドア冷蔵庫,家電,80820,300 17,BS内蔵29型カラーテレビ,テレビ,62820,450 18,サロンヒーター,冷暖房器,8082,5000 ------------------------------------------------------

みんなの回答

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 ここまで出来ているのでせっかくだからまずはヒントを。 1.レコード数分のループ(forとか) 2.1レコードの4番目をintに変換して入力された値と比較 3.2の条件が真になった場合にそのレコードの値を表示 こんな感じでしょうか。 配列の中を全てチェックしていけば、条件にあったレコードのみ表示できると思います。

touchy
質問者

お礼

解決しました! 急を要していたのでわかる人に助言いただいて解決にいたりました。 ヒントをいただく方法では当方の初心者レベルでは間違いなく何度となくやりとりが重なることになるのは必須なので、回答者様に何度も返答していただくことになるし急がせることにもなることがわかっていたので書きこむことができませんでした。申し訳ありません。 レコードの四番目だけをintにするのがやはり必要だったのですね。 いったんStringに入れて、そのあとで for文の中でint化するんですね。 for文の中はユーザ入力した数値との比較をすれば良いのでわかりましたが。 せっかく書いていただきましたが対応できず申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • (java)HTMLをParseさせず・・・

    初めてお世話になります。 現在、HTMLをParse(解析)せずに、 BufferedReder→indexOf(抜き取りたい「文字」の出現場所を検索)→ substring(indexOfの内容を元に「文字」を抜き取る) という内容のシステムをjavaで組みたい!と試行錯誤しております;; 目的はParseと上記内容での実行時間がどれくらい違うのかという興味で作成を開始しました。 今回、BufferedReader→indeOfまでは考え通り上手くいったのですが、 substiringで1000文字以上あるHTMLソースから指定した箇所(indexOf)で抜き取る作業ができないので教えてください。(正確には○○.substring(int,int)の○○部分をどこにしていしたらいいのかわかりません。) 是非ご教授の程よろしくお願いします。 実際のコードは下記の通りです。 import java.io.*; import java.net.URL; public class Test { public static void main (String []args){ add(); } public static void add(){ try { //URLを指定して読み込み URL u = new URL("http://'"URLを入力"'/"); InputStream is = u.openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is,"EUC_JP")); String line ; int linenum=1; int length=1; //1行ずつ読み込み while ((line = br.readLine()) != null) { String A = "166"; String B = "102"; int i; int j; //文字列検索(HTMLソースの0~何文字目に出現!?) i = line.indexOf(A); j = line.indexOf(B); if(i>=0){ System.out.println((i+length) + "文字目"); } if(j>=0){ System.out.println((j+length) + "文字目"); } linenum++; length += line.length() + 1; String str1 = line; String str2 = str1.substring(i+length,j+length);                             //当然「line」なんかにsubstringかけても駄目でしたw System.out.println(str2) ; } is.close(); br.close(); } catch (FileNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } 説明が意味不明な点もあるかと思いますので、 質問もお待ちしております。 是非、お力をお貸ししてください。 よろしくお願いいたします。

  • コンパイルエラーについて。

    今晩は。現在javaについて勉強しているのですが、 コンパイルエラーを解決することが出来ません。 プログラムの内容は好きな文字列を入力し、空白文字を取り除き出力するといったものです。 空白はindexOf()メソッドを使って探し出す。 空白削除はdeleteCharAt()メソッドを使って行う。 というのが条件です。 どなたかご回答おまちしております。 class bf2{ public static void main(String args[])throws IOException{ String t = "end"; String str = ""; int l; int i; int xx=0; String kuhaku = " "; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(!str.equals(t)){ System.out.print(">"); str = br.readLine(); if(str.equals(t)) break; l = str.length(); i=0; StringBuffer str2 = new StringBuffer(str); while(i<l){ xx = str2.indexOf(kuhaku); str2.deleteCharAt(xx); //こちらがコンパイルエラー会場です。 i++; System.out.println(str2); } } } } Exception in thread "main" java.lang.StringIndexOutOfBoundsException at java.lang.StringBuffer.deleteCharAt(Unknown Source)

    • ベストアンサー
    • Java
  • 文字列について(続き)

    文字列について、あれから私がベストアンサーに選んだ回答を元に下記のプログラムを作成したのですが私が作成したプログラムで出た結果が下記のようになります。実行例のような結果を出すにはどのようにすればいいのですか?Java初心者なのでお願いします。 作成したプログラムで出た結果 文字列を入力 My name is Taro Sandai. 整数を入力 10 My name is.iadnaS oraT 実行例 文字列を入力 My name is Taro Sandai. 整数を入力 10 My name isdnaS oraT ai. import java.io.*; class K2 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("整数を入力"); String str2 = br.readLine(); int num = Integer.parseInt(str2); String str3 = str1.substring(0,num); String str4 = str1.substring(num); StringBuffer str5 = new StringBuffer(str4); str5.reverse(); System.out.println(str3+str5); } }

    • ベストアンサー
    • Java
  • Scanner と BufferedReader

    javaでキーボードからの入力を格納するやつがあって、 Scanner と BufferedReaderのやり方がありますが、これはどう違うのでしょうか? それとも全く同じでしょうか? たとえば、 ■一つ目 import java.io.*; class Sample3{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列を入力してください"); String str1=br.readLine(); System.out.println("検索文字を入力してください"); String str2=br.readLine(); char ch=str2.charAt(0); int num=str1.indexOf(ch); if(num !=-1) System.out.println(str1+"の"+(num+1)+"番目に「"+ch+"」が見つかりました"); else System.out.println(str1+"に「"+ch+"」はありません"); } } ■二つ目 import java.util.Scanner; class Sample4{ public static void main(String[] args){ Scanner stdIn=new Scanner(System.in); System.out.println("文字列を入力してください"); String str1=stdIn.nextLine(); System.out.println("検索文字を入力してください"); String str2=stdIn.nextLine(); char ch=str2.charAt(0); int num=str1.indexOf(ch); if(num !=-1) System.out.println(str1+"の"+(num+1)+"番目に「"+ch+"」が見つかりました"); else System.out.println(str1+"に「"+ch+"」はありません"); } } これら2つは全く同じ実行結果が得られると思うのですが、 Scanner と BufferedReader の使い分けるべき場合などあるのでしょうか?

    • ベストアンサー
    • Java
  • List<T>のタイプを調べる方法は?

    C# を使用しています。 たとえば {  string str;  MessageBox.Show(obj.GetType().Name); } これだと[string]が表示されます。 次に {  List<int> ilist = new List<int>(); MessageBox.Show(obj.GetType().Name); } これだと[List`1]が表示されます。 これだけでもListってことだけはわかるのですが 最後に {  List<int> ilist = new List<int>();  List<string> slist = new List<string>();  MessageBox.Show(ilist.GetType().Name);  //→[int]  MessageBox.Show(slist.GetType().Name);  //→[string] } この場合に [string],[int]と表示させるにはどうすれば よいのでしょうか?

  • charAt(0)について

    import java.io.*; class Sample3 { public static void main(String[] args) throws IOException { System.out.println("文字列を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("検索文字を入力してください。"); String str2 = br.readLine(); char ch = str2.charAt(0); int num = str1.indexOf(ch); if(num != -1) System.out.println(str1 + "の" + (num+1) + "番目に「" + ch + "」が見つかりました。"); else System.out.println(str1 + "に「" + ch + "」はありません。"); } char ch = str2.charAt(0);の部分ですが、 charAt(0)というのは ( )に書かれている番号「のみ」を参照するんですよね? だからもし「こ」んちにはと入力しても0番目の「こ」しか出さないはずなのに、 「に」 を入れたらちゃんと「3番目に に が見つかりました」と出るのはなぜですか?

    • ベストアンサー
    • Java
  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • doubleで入力するには?

    はじめまして。 Javaの勉強をはじめたばかりです。 質問のしかたが正しいのかもちょっと自信がないのですが、 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); っていうのがありますよね? これの『int』のところを『double』で入力できるように するにはどうすればいいのでしょうか? すごい初心者な質問で申し訳ないですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • Java int sum = 0は必要ですか?

    やさしいJavaという本を買ったのですが、良くわからない箇所がありました。 --------------省略----------------- class Sample6 { public static void main(String[] args) throws IOException { System.out.println("整数を3つ入力してください。") ; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ; String str1 = br.readLine() ; String str2 = br.readLine() ; String str3 = br.readLine() ; int sum = 0 ; sum += Integer.parseInt(str1) ; -------------------略----------------- int sum = 0 ; とありますが、0と設定しておく必要はありますか? 無いとまずいですか? いきなりこのコードが出てきたと思うのですが どこかに書いてましたっけ?

    • ベストアンサー
    • Java
  • 三つの文字を順に並べるプログラム

    三つの文字を入力して、順番に並べて表示させるプログラムが作りたいのですが、どうしたらいいのかわかりません。 二つまではできました。以下に記します import java.io.*; class Sample { public static void main(String args[]) throws IOException { System.out.println("文字列1を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1=br.readLine(); System.out.println("文字列2を入力してください。"); String str2=br.readLine(); int s = 1,t = 0; if(str1.length()>str2.length()){ int len=str1.length(); StringBuffer sb=new StringBuffer(str1); while(s<len+1){ sb.insert(s,str2.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); }else{ int len=str2.length(); StringBuffer sb=new StringBuffer(str2); while(s<len+1){ sb.insert(s-1,str1.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); } } } str1に123 str2に45といった風に入力すると14253といった風になります。 これにstr3を加え、str3が6789ならば、146257389 となる風にしたいです。

    • ベストアンサー
    • Java