手入力された値を0.5区切りに変換するプログラム

このQ&Aのポイント
  • 手入力された値を0.5区切りに変換するプログラムを作成しています。
  • 0.1~0.4 を入力すると 0.0 を返し、0.5~0.9 を入力すると 0.5 を返します。
  • 環境はJDK1.4です。超初心者プログラムであることを承知していますが、もっと短くする方法はありますか?
回答を見る
  • ベストアンサー

手入力された値を0.5区切りに変換する

手入力された値を0.5区切りに変換するプログラム を作成しています。 0.1~0.4 を入力 → 0.0 を返す 0.5~0.9 を入力 → 0.5 を返す という感じです。 public static void main(String argv[]){  Double D = new Double(argv[0]);  double d = D.doubleValue() * 2;  int i = (int)d;  double i_d = i;  double d_value = i_d / 2;  Double D_value = new Double(d_value);  String s_str = D_value.toString();  System.out.println(s_str); } で希望する値(String型)は返ってくるのですが・・・ (NumberFormatExceptionは無視します。) すごい無駄の多いプログラムに思えて仕方ありません。 超初心者プログラムであること重々承知ですが、もっと短くなりませんか? 環境:JDK1.4 です。

  • ssm3u
  • お礼率70% (42/60)
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • wogota
  • ベストアンサー率42% (66/154)
回答No.2

public static void main( String argv[]){  Double D = new Double( argv[0]);  double d = floor( D.doubleValue() * 2)/ 2;  Double D_value = new Double( d);  String s_str = D_value.toString();  System.out.println( s_str); } java.lang.mathクラスの中には、その値を超えない最大の整数に 等しいdouble値を返すメソッドfloor() がありますので、それを 利用することになるでしょうか。今手元にjavaの環境がないので、 上記のソースで動くかどうかはわかりません。

ssm3u
質問者

お礼

どうしても floorのところでエラーになります。 たぶん私の理解不足なんですね・・・ ちょっと便利そうなので使いたいと思います。 結局、同じようなプログラムを 必要箇所全てにつけるのが面倒だというところから 派生しているんですが・・・ 0.5区切りに切る専用のJavaBeanを作成し、 それを使用することにします。 ありがとうございました。

その他の回答 (1)

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

public static void main(String argv[]){  Double D = new Double(argv[0]);  D = (double)((int)(D / 0.5)) / 2.0;  String s_str = D.toString();  System.out.println(s_str); } もしくは public static void main(String argv[]){  Double D = new Double(argv[0]);  D = (D<0.5? 0.0:.05);  String s_str = D.toString();  System.out.println(s_str); } どっちも検証してませんが、と言うかJAVAは知らないんですがこれでどうです?

ssm3u
質問者

お礼

ありがとうございました。 Double, double は別物(?)であるため キャストエラーが一杯でますね。。 参考にしつつ手を加えて書き直してみます。

関連するQ&A

  • DoubleからBigDecimalへの変更の仕方

    以下のソースをdouble使用箇所をBigDecimalに変更して行いたいのですが・・・ public String test( String str1, String str2){ // 計算方法: // str1 / str2 の小数点第3位切り上げ後に100掛け // 割り算を行う double d = Double.valueOf(str1).doubleValue()/Double.valueOf(str2).doubleValue(); // 掛け算を行う d = d*100; // 小数点第1位切り上げる if (d >= 10.88) { d = 11; } DecimalFormat ff = new DecimalFormat("#0.0"); return ff.format(d); }

    • ベストアンサー
    • Java
  • 入力データ数を入力して、その数だけ整数値を入力し配列を格納した後、入力

    入力データ数を入力して、その数だけ整数値を入力し配列を格納した後、入力した値を横に表示するプログラムを下記に作成したのですが、思う通りに表示されません。初期化しても最後の値になるし、なぜでしょうか? import java.io.*; class Hairetu1 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("データはいくつですか?"); String str = br.readLine(); int num = Integer.parseInt(str); int a[]=new int[num]; int i,tmp=0; for(i=0; i<a.length; i++){ System.out.print((i+1)+"番目は?"); str = br.readLine(); tmp = Integer.parseInt(str); a[i] = tmp; } for(i=0; i<a.length; i++){ System.out.print("入力した値は"+tmp+"\t"); }

    • ベストアンサー
    • Java
  • クラスのフィールドの値を配列に代入する方法

    フィールドの値を代入したいのですが、 java.lang.ArrayIndexOutOfBoundsException というエラーが出てしまい、どうすればいいのかわかりません。 どのように対処すればいいのでしょうか? class Car { String carname; int height; int width; int length; } class public static void main(String[] args) throw IOException { Car car[]; car = new Car[5]; System.out.println("車の情報を入力してください。"); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in); for(int i=0; i<5; i++){ car[i] = new Car(); System.out.println(i+1 + "台目の車の名前を入力してください。"); String str1 = br1.readLine(); System.out.println("車の高さを入力してください。"); String str2 = br1.readLine(); System.out.println("車の幅を入力してください。"); String str3 = br1.readLine(); System.out.println("車の長さを入力してください。"); String str4 = br1.readLine(); int h1 = Integer.parseInt(str2); int w1 = Integer.parseInt(str3); int l1 = Integer.parseInt(str4); car[i].carname = str1; car[i].height = h1; car[i].weith =w1; car[i].length =l1; } for(int i=0; i<5; i++){ int c_h[] = new int[5]; c_h[i] = car[i].height; } } よろしくお願いします。

    • ベストアンサー
    • Java
  • 入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小

    入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小値のプログラムを下記に作成してみたら最小値が0になりました。そして、もう一つ繰り返し文を作ってみたら、最大値・最小値がうまく表示されました。この違いはどうしてですか?教えてください。 import java.io.*; class Hairetu1 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("データはいくつですか?"); String str = br.readLine(); int num = Integer.parseInt(str); int a[]=new int[num]; int i; int max=0; int min=a[0]; for(i=0; i<a.length; i++){ System.out.print((i+1)+"番目は?"); str = br.readLine(); int tmp = Integer.parseInt(str); a[i] = tmp; if(max<tmp){ max=tmp; } if(min>tmp){ min=tmp; } } System.out.println("入力した値は"+test.length); System.out.println("最大は"+max); System.out.println("最小は"+min); } }

    • ベストアンサー
    • Java
  • int型の値をStringに変換して表示しようとしたけど

    すごく初歩的なことなんですが、int型の値をString型に変換して TextFieldに表示させたいんです。 やり方としてはStringの値をわざわざint型に変換し、その値をさらに String型に変換しているんです。値は、文字列の先頭に”0”が付いて いるため、画面上表示させる時には、先頭ゼロを削除したいんです。 つまりStringの値は”0123.58”です。これを最終的に”123.58”と してやりたいんです。 そして、上記を下記のようにやってみた所、TextFieldはぴくりとも動 きませんでした。 String testA = "0123.58"; int suji = Integer.parseInt(testA); String kotae = new Integer(suji).toString(); textfield_A.setText(kotae); お手数ですが、どこがいけないのか?教えてください。

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

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

    • ベストアンサー
    • Java
  • javaについて

    キーボードから入力をして、その後str[0][0]とstr[1][0]の文字を繋げたいのですがエラーとなってしまいます。どう変えたらよいでしょうか。 以下がプログラムです。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu3 { public static void main(String[] args) throws IOException { int KEYWORDMAX=10; int CNTMAX=100; String [][]str = new String[KEYWORDMAX][CNTMAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line=null; for (int i=0;i<KEYWORDMAX;i++){ System.out.println("第"+(i+1)+"番目のキーワードを設定しますか?(y/n)"); line=br.readLine(); if(line.equals("n")) break; for (int s=0;s<CNTMAX;s++){ System.out.println("キーワードを入力してください(終了=0)"); line=br.readLine(); if(line.equals("0"))break; str[s][i]=line; } } String keyword = new String(str[0][0]" "str[1][0]); System.out.println("キーワードは "+keyword); } } 以下はエラー表示です。 gugu3.java:24: ')' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: 文ではありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: ';' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ エラー 3 個

    • ベストアンサー
    • Java
  • 初心者Javaの件。

    いつも大変お世話になりありがとうございます。 次の2つのコードは関係があるのでしょうか? 2つを合体させないとプログラムがエラーになるのでしょうか? 私は合体させないとプログラムが成立しないと思います。 アドバイスのほど宜しくお願い申し上げます。 コード1 public class Person { private int age; private double weight; private double height; public Person(int age, double weight, double height) { this.age = age; this.weight = weight; this.height = height; } public void show() { System.out.println("年齢は" + age + "体重は" + weight + "身長は"+ height +"です。" ); } } コード2 import java.io.BufferedReader; public class Sample3 { { public static void main(String args[]) throws Exception { person p[]; System.out.println("人数を入力してください。"); BufferedReader br = new BufferedReader(new inputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); p = new Person[num]; for(int i=0; i<num; i++) { } System.out.println("年齢を入力してください"); str = br.readLine(); int age = Integer.parseInt(str); P = new Person[num]; for(int i=0; i<num; i++){ System.out.println("年齢を入力してください"); str = br.readLine(); int age = Intger.parseInt(str); System.out.println("体重を入力してください"); str = br.readLine(); double weight = Double.parseDouble(str); System.out.println("身長を入力してください"); str = br.readLine(); double height = Double.parseDouble(str); p[i] = new person(age, weight, height); } for(int i=0; i<num; i++) { p[i].show(); } } }

    • ベストアンサー
    • Java
  • 木構造と再帰

    1週間考えましたが分かりません 正の整数mとn(n <= 9)を入力して、1以上n以下のn個の数字を自由に組み合わせて構成されるm桁の数字列のすべてを表示するJavaのプログラムである。 以下に、本プログラムの動作例を示す。 桁数を入力してください 4(入力) 1以上9以下の整数を入力してください 2(入力) 1111 1112 1121 1122 1211 1212 1221 1222 2111 2112 2121 2122 2211 2212 2221 2222 このとき、本プログラムのsetNode()メソッドの中身を記述してプログラムを完成させよ。ただし、setNodeメソッドは再帰的手続きとし、プログラムのほかの部分を変更(追加、削除を含めて)しないこと。 import java.io.*; class Node { private int value; private Node child[]; public void setNode(int value, int digit, int range); { //ここに解答 } public int getValue() { return value; } public Node getChild(int index) { return child[index]; } } class NumberString { static int range; public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.plintln("桁数を入力してください"); String str1 = br.readLine(); int digit = Integer.parseInt(str1); System.out.plintln("1以上9以下の整数を入力してください"); String str2 = br.readLine(); range = Integer.parseInt(str2); Node root = new Node(); root.setNode(0, digit, range); for(int i = 0;i < range; i++){ printNumber(root.getChild(i), digit, ""); } } private static void printNumber(Node n, int digit, String str) { if(digit == 1){ System.out.plintln(str + n.getValue()); return; } for(int i = 0;i < range;i++){ printNumber(n.getChild(i), digit - 1, str + n.getValue()); } } }

    • ベストアンサー
    • Java
  • 配列の値の参照について

    下記のプログラムの-------------で囲まれた部分が、コンパイルは通るのですが実行すると"value[1][0]"以降が参照できません(ここではcount=3 となっています)。 for文を使わずに"System.out.println(value[1][0])"とすると値を取り出せるのですが…。 実行時のエラーは Exception in thread "main" java.lang.ArrayIndexOutOfBoundException: 3 です。 ソースコードをそのまま載せて長文になってしまい申し訳ありません。 プログラム初心者なので、些細なことでもいいので回答お願いします。 import java.util.*; import java.io.*; public class Search { static String dataFileName = "CityData.txt"; ArrayList<String> array = new ArrayList<String>(); GetDataCount gdc = new GetDataCount(dataFileName); int count = gdc.getCount(); int count2 = 0; String[][] value = new String[count][3]; public Search(String dataFileName){ try{ BufferedReader reader = new BufferedReader( new FileReader(dataFileName) ); String line = ""; while((line = reader.readLine()) != null){ Vector<String> variable = readLine(line); System.out.println(variable); count2++; } }catch(IOException e){ System.out.println(e); } //---------------------------------------------------------- for (int i=0; i<count2; i++){ for (int j=0; i<3; j++){ System.out.println(value[i][j]); } } //---------------------------------------------------------- } public Vector<String> readLine( String line ){ StringTokenizer st = new StringTokenizer( line, "," ); Vector<String> variable = new Vector<String>(); for( int i=0 ; i<3 ; i++ ){ String data = st.nextToken(); variable.addElement( data ); value[count2][i] = data; System.out.println(value[count2][i]); } return variable; } public class GetDataCount{ int count = 0; public GetDataCount(String dataFileName){ try{ BufferedReader reader = new BufferedReader( new FileReader(dataFileName) ); String line = ""; while((line = reader.readLine()) != null){ count++; } }catch(IOException e){ System.out.println(e); } } public int getCount(){ return count; } } public static void main(String[] args){ new Search(dataFileName); } }