- 締切済み
Stringの100と100.0を同一とみなす方法
とあるフレームワークで計算するメソッドを通して計算させると、引数によって有効桁までのStringが戻り値として返されます。 そのStringの戻り値を使用して処理を分岐させたいのですが、幾分有効桁に問題があります。 (例) String p_str1 = "100" String p_str2 = "100.0" このp_str1とp_str2を等しいとみなしたいのですが、愚直に末尾から順番に文字を取り出し、最後の桁が0の場合は切り捨て(直前が.ピリオドの場合はピリオドモ含めて)てするような方法しか思いつきません。 それ以外にp_str1とp_str2を等しいとみなす方法はないでしょうか? よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
関連するQ&A
- 計算クラスのメソッドについて
<問題> Mainクラス mainメソッド 1)実行時に引数を2つ付けて実行する。(数字) 2)計算クラスのオブジェクトを生成。 3)argsの0番目と1番目から値を取得し、int型に変換する。 4)int型に変換した値2つを引数として、計算クラスの足し算メソ ッドを実行し、戻り値を取得して表示する。 計算クラス 足し算メソッド(引数=int,int) 1)int型の数字を引数として2つ受け取る。 2)二つの引数の値を足し算する。 3)計算した値を戻り値とする。 *********************************************************** 上記の問題についての質問です。 最初mathくらすのメソッドを使うのかと思ったのですが、 足し算を計算するようなメソッドが無かったのでネットで検索 して見つけたcalcAdd()というメソッドを使って記述してみました。 でも「シンボルを見つけられません」のエラーが出てコンパイル 出来ないし、メソッドの使い方も違うような気がするので、 分かる方正しい記述の仕方を教えてください。 package siryou; class Keisan { int cal; int cul; public int tashizan(int a, int u) { cal = a; cul = u; int kekka = (Integer)calcAdd(cal, cul, 0); return kekka; } } class TashiHikiKakeWari { public static void main(String args[]) { Keisan ki = new Keisan(); String str1 = args[0]; String str2 = args[1]; int res1 = Integer.parseInt(str1); int res2 = Integer.parseInt(str2); ki.tashizan(res1, res2); int kekka = ki.tashizan(res1, res2); System.out.println(kekka); } } ************************************************************ calcAdd()メソッドの呼び出し方も間違っている気がするのですが、 そもそもこのメソッドって呼び出せば自動的に計算されるように なっているのですか? それとも足し算を計算する記述は別にしなければならないのでしょうか?
- ベストアンサー
- Java
- クラスを使用した問題
問題 Mainクラス 1.実行時に引数を付けて実行する。 2.判定クラスのオブジェクトを生成する。 3.args(実行時の引数)から値を取得する。 4.argsから取得した値を引数として、判定クラスのnameメソッドを実行する。 5.argsから取得した値を引数として、判定クラスのageメソッドを実行する。 6.argsから取得した値を引数として、判定クラスのbirthメソッドを実行する。 判定クラス nameメソッド(引数=String) 1.String型の引数を一つ受け取る 2.受け取った引数の値が「name」だった場合、名前を表示する。 戻り値なし。 ageメソッド(引数=String) 1.String型の引数を一つ受け取る 2.受け取った引数の値が「age」だった場合、名前を表示する。 戻り値なし。 birthdayメソッド(引数=String) 1.String型の引数を一つ受け取る 2.受け取った引数の値が「birthday」だった場合、名前を表示する。 戻り値なし。 実行結果 java NameAgeBirth name 岩田 java NameAgeBirth age 27歳 java NameAgeBirth birthday 5月16日 参考例が欲しいです。良かったら参考例をください。よろしくお願いします。
- 締切済み
- Java
- インターフェイス実装クラスの表示について
/* インタフェースPlanetを実装したクラスEarth、Marsがあります。 以下の実行結果になるようにクラスAggregateへshowメソッドを 追加してください。 [実行結果] 地球 太陽系にある惑星の1つで、太陽から3番目に近い。・・・ 火星 太陽系の太陽に近い方から4番目の惑星である。・・・ */ // [Planet.java] // 実装したいPlanetクラス interface Planet { public String getName(); public String getOutline(); } // Planetを実装したEarthクラス // [Earth.java] class Earth implements Planet { private final String name="地球"; // getNameメソッド:戻り値String、引数無し public String getName(){ return name; } // getOutlineメソッド:戻り値String、引数無し public String getOutline(){ return "太陽系にある惑星の1つで、太陽から3番目に近い。・・・"; } } // Planetを実装したMarsクラス // [Mars.java] class Mars implements Planet { private final String name="火星"; // getNameメソッド:戻り値String、引数無し public String getName(){ return name; } // getOutlineメソッド:戻り値String、引数無し public String getOutline(){ return "太陽系の太陽に近い方から4番目の惑星である。・・・"; } } // メインクラス // [Main.java] class Main{ public static void main(String[] args){ // Earth&Marsクラスのインスタンス化 Earth earth = new Earth(); Mars mars = new Mars(); // Aggregateクラスのインスタンス化 Aggregate aggregation = new Aggregate(); // showメソッド呼び出し:戻り値無し、引数earth・mars aggregation.show(earth); aggregation.show(mars); } } // [Aggregate.java] class Aggregate { // ここにshowメソッドを追加 public void show(Earth planet){ System.out.println(); } public void show(Mars planet){ System.out.println(); } } showメソッドに引数としてEarth planet,Mars planetを渡すというところまでは理解しています。後は星の名前と概要を表示するのですが、例えば、 showメソッド内 // ここにshowメソッドを追加 public void show(Earth planet){ String str = earth.getName(); System.out.println(str); } public void show(Mars planet){ String str2 = mars.getOutline(); System.out.println(str2); } } とすると、erathとmarsの部分が「シンボルがありません」のエラーになります。自分の認識としては、EarthクラスとMarsクラスでフィールド変数を宣言しているので使えるのでは?と思っていたのですが、全然違うようです。どなたかどちらかのコード例を表記して頂けないでしょうか?よろしくお願い致します。
- ベストアンサー
- Java
- ostringstreamからCの文字列を得る方法
ostringstreamからCの文字列を得る方法について質問です。 ostringstreamのstr()メソッドを使えば、string型が得られると思うのですが、 以下の様にすると期待する様な結果が得られません。 ostringstream hoge; hoge << "HOGE" << "FUGA"; const char* p; p = hoge.str().c_str(); // NG str()メソッドで取得した結果を一旦string型に入れると期待する文字列を得る事が出来ます。 string tmp = hoge.str(); p = tmp.c_str(); // OK なぜp = hoge.str().c_str();では期待する結果("HOGEFUGA")を得る事が出来ないのでしょうか? コンパイラはVC++ 2010 Express Editionです。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Stringのフォーマットの変換方法(Java)
Java実行時の引数として渡した14桁の数値(文字列)を、 ----- yyyy-mm-dd hh:mm:ss ----- の形式にフォーマット変換したいです。 (日時のように書いてますが、型はDateやTimestampではなくStringのままでもOK) 文字列をsubstringメソッドで区切って、 その後に「-」や「:」と+で文字列連結させる方法も考えたのですが、 そのようにせずにもう少しシンプルに変換する方法はありませんでしょうか?
- ベストアンサー
- Java
- charで宣言した変数をstringへの代入で
wchar_t cOrg[128]と宣言している変数にstringで宣言しているstrを cOrg[i] = str[i]; このように代入することはできたのですが、 char cAns[ 128 ]; このように宣言した変数の値をstrの41番目と42番目に 次のように入れようとするとエラーが出ます。 str[41]=cAns[1]; str[42]=cAns[2]; (エラー内容) \Form1.h(428): error C2664: 'System::String::String(wchar_t,int)' : 1 番目の引数を 'wchar_t [128]' から 'wchar_t' に変換できません。(新しい機能 ; ヘルプを参照) このような代入はできないのでしょうか? プログラムの詳細は下のようなものです。 wchar_t cOrg[128],*p; String^ str; String^ str2; int i; int iVal1,iVal2,iTotal = 0,iHosu; char cAns[ 128 ]; str = this->textBox1->Text; for(i=0;i<41;i++) { cOrg[i] = str[i]; } -------(中略)------------------------------------------ iHosu = ~iTotal; // 1の補数 iHosu++; // +1 iHosu = iHosu & 0x00FF; sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 ); str[41]=cAns[1]; str[42]=cAns[2];
- ベストアンサー
- C・C++・C#
- 文字列の種類判定の方法について
引数のStringが、「すべてアルファベット」か「日本語(ひらがな、カタカナ、漢字)を含む」かによって分岐処理をさせたいと思っています。 ネットを調べると、Character.isLetterが使えそうかと思ったのですが、これは1文字のみの判定のようですね。 Stringを一度に判定するメソッドはありませんか? なければ、Stringを1文字ずつ分けて判定していくしかないんでしょうか。 つまらない質問ですが、よろしくお願いします。
- 締切済み
- Java
- クラスやメソッドが理解できません
今javaを勉強中なのですが、クラスやメソッドで生きず待ってしまいました。 メソッドの定義は 戻り値の型 メソッド名(引数リスト) { 文; ・・・ return 式; } ですが、メソッドから返されえる値を戻り値といますよね?呼び出し元に値を返すってどういうことなのでしょうか? int getNum() { System.out.println("調べました") return num; } たとえば、上記のようなものですが。もしも、このメソッドを呼び出すと、”戻り値”が戻ってくるわけですが、これはgetNumという変数のなかに計算式が入っている?という考え方でいいのでしょうか? よろしくお願いいたします。
- ベストアンサー
- Java
- 文字の表示
オブジェクトを受け取るメソッド ↓は引数にString型のオブジェクトを指定するプログラムです public class Sample { public static void main(String args[]) { String str = "abcd"; change(str); System.out.println(str); } private static void change(String str) { str = "efgh"; } } 私の中ではefghがでると思っていたんですが・・ これを実行してみると変数strに最初に代入した文字列が表示されるんです! なぜですか? できれば理由を教えてください 回答よろしくお願いします
- 締切済み
- その他(趣味・娯楽・エンターテイメント)
お礼
回答が遅れまして申し訳ございません。 100と100.0に関しては問題ないですね。 しかし、インプットデータの桁数によっては、結構桁数が大きくなってしまうことがあります。 丸め誤差に関しては、現在のところはインプットデータの桁数は問題ない桁数ですが、将来的にそのままかどうかわかりません。 Math.powメソッドは今まで使用したことがありませんでしたので、勉強になりました。 ありがとうございます。