• ベストアンサー

【Java】

y_free_tempの回答

回答No.2

どんなときに利用しようとした場合のことなのかが不明瞭なので何とも言いがたいですが、 明確にインスタンス化する理由・設計思想があるのであれば、別に使っても構わないと思いますよ。 ですが、true、5、という確定的な値として利用するのであれば(いわゆるマジックナンバー的なものであるならば)、定数化すべきでしょうし、特にBooleanはtrueとfalseの定数を既に持っていたはずですので、あえて用意する必要はそれほどはないですよね。(それでも、定数名や変数名に意味があるので再定義する、というのなら有りだとも思います) 他にも、中にはプリミティブはインスタンス化しないとうまく動かない、なんてフレームワークもあったりするので、結構ケースバイケースだと思います。

TeferiMage
質問者

お礼

ありがとうございます。 定数として使うケースでは、 もちろん、定数として宣言すると思うのですが、 //初期化 Boolean hoge_flg = new Boolean(true) (~ 中略 ~) // Flgを更新 hoge_flg = false のようなケースで、初期化の目的で実施するのは アリなのですよね?? プリミティブはインスタンス化しないとうまく動かないというフレームワークもあったのですね。 なるほどです。

関連するQ&A

  • boolean を返すクラス(Java)

    JAVAについての質問です。 Java versionは1.6.0_43で、 BlueJ versionは3.0.8です。 これはDriveです↓ Temperature t1 = new Temperature (); Temperature t2 = new Temperature ('F'); t2.setTempObj(32.0); System.out.println ("Does 0C equal 32F: " + t1.equals(t2)); そしてこれがクラス↓ public boolean equals(Temperature testObj) { return //ここにいれるものがなにかわからない。 } アウトプットはtrueです。 booleanのところがdoubleとかなら入れものがわかるのですが、 trueかfalseの場合分けみたいなときはなにを入れたらいいのでしょうか? if文をいれようとも考えましたが結局意味がわからず終いでした。 必要な情報があったら言ってください。 乱文ですが、よろしくおねがいします。

    • ベストアンサー
    • Java
  • JAVAのプログラムについて

    ////////////////////////////////////////////////////////////////// abstract class Time_D { abstract Object Sec(); abstract Object Min(); abstract Object Hour(); } ////////////////////////////////////////////////////////////////// class PresentTime_D extends Time_D { Object Sec() { Date tm = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("s"); return new Integer(Integer.parseInt(formatter.format(tm))); } Object Min() { Date tm = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("m"); return new Integer(Integer.parseInt(formatter.format(tm))); } Object Hour() { Date tm = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("h"); return new Integer(Integer.parseInt(formatter.format(tm))); } } //////////////////////////////////////////////////////////////// class SetTimeCheck_D extends PresentTime_D { int settime; SetTimeCheck_D(int _settime) { settime = _settime; } //-------------------------------------------------- Object Sec() { return new Boolean(((Integer)super.Sec).intValue == settime); } Object Min() { return new Boolean(((Integer)super.Min).intValue == settime); } Object Hour() { return new Boolean(((Integer)super.Hour).intValue == settime); } } 上記のようなプログラムをした場合、下記のようなエラーが出ます。 return new Boolean(((Integer)super.Sec).intValue == settime); } のSecはPresentTime_Dのクラス内のフィールドではありません。 なぜ、このようなエラーが出るのですか?

  • ラムダ式とかデリゲートっぽい感じのことについて

    色々と調べてみたのですが 現状ではC#における List<int> ml = new List<int>(); ml.Add(111); ml.Add(121); ml.Add(310); Console.WriteLine(ml.Exists(t=>{ return t == 310;} )); 的なことをやろうとすると、一応このまんま「単純にあるかどうかとかだけ」なら final Collection<Integer> ml = new ArrayList<Integer>(); ml.add(111); ml.add(121); ml.add(310); System.out.println(ml.contains(310)); でも可能ですが、 独自のクラスで独自のデリゲートっぽい事をやろうとすると 例えば interface Func<T, R> { R Do(T t1); } class MyList<T>{ private List<T> list = new ArrayList<T>(); public boolean Exists( final Func<T,Boolean> deleg ){ for(T i : list) if ( deleg.Do(i) ) return true; return false; } public boolean add(T t){ return list.add(t); } } ////どっかの関数で///// final MyList<Integer> ml = new MyList<Integer>(); ml.add(111); ml.add(121); ml.add(310); //匿名クラスを作り、Doをオーバーライド final boolean b = ml.Exists( new Func<Integer,Boolean>(){ @Override public Boolean Do(Integer t1){ return t1.equals(310); }}); System.out.println(b); これぐらいの内容になってしまう と思うのですが( とくに面倒なのが、「new Func」からの、「同じ型の表記」が複数回登場してしまう ) だいたい今タイムリーにこの辺が改善されるかどうか というくらいのとこに行ってる感じで Java 7ではラムダ式が先送りになったみたいだけど 近々JavaでもC#(やC++11)っぽく出来るようになる可能性が高め なので、今からコードを書く場合には こういうところが絡む部分はまだ様子見しといて 採用された後でラムダ式を使って簡単に書こう と、いう判断にしといても良さ気ですかね?

    • ベストアンサー
    • Java
  • ランダムでのboolean値の与え方

    boolean[] box = new boolean[100] と設定した配列にランダムでtrue か false を与えたいのですが方法がよくわかりません。そのときtrueの数は配列の全体数の2分の1以下(上の配列だと50以下)になるようにしたいのですが、どうすればよいですか?

    • ベストアンサー
    • Java
  • 【Java】ある数列から、素数を探すプログラムについて

    Java初心者です。独学なので質問できる環境が無く、 こちらで質問致します。回答をお願い致します。 以下のプログラムについて質問です。 class Prime { public static void main(String[] args) { int max = 100; // 素数を探す数の最大値 boolean[] a = new boolean[max]; // 素数かどうか判定する配列 // 配列の初期化 for(int i = 0; i < max; i++) a[i] = true; // 素数かどうか判定 for(int i = 2; i < max; i++) { if(a[i-1]) { for(int j = 2; i*j <= max; j++) a[i * j - 1] = false; } else continue; } // 結果を表示 for(int i = 1; i < max; i++) { if(a[i]) System.out.print((i + 1) + " "); } System.out.println(); } } 上記の「配列の初期化」の個所、 for(int i = 0; i < max; i++) a[i] = true; ここでなぜ、a[i] = true;となるかわかりません。 0と1はどちらも素数ではないと思うので、 私はtrueではないと思うのですが・・・。 ぜひとも教えて頂きたいと思います。

    • ベストアンサー
    • Java
  • プログラムを補って下さい(swing)

    下記のプログラムで実装できない所がありますので補える方は教えてください 1.チェックボックスで削除を選択した、行番号をコンソールに表示したい。 2.コンボボックスで選択されたコンボボックスの文字列と選択されたコンボボックス   のインデックス番号が知りたい 以上です。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.Class; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; public class JTableSample1 implements ActionListener{ JComboBox comboBox; public static void main(String[] args) { new JTableSample1().init(); } public void init() { String[] title = { "削除", "String", "Integer", "JComboBox" }; String prompt = "選んで下さい"; Object[][] records = { { Boolean.FALSE, "Rachel Green", new Integer(1970), prompt }, { Boolean.FALSE, "Monica Geller", new Integer(1969), prompt }, { Boolean.FALSE, "Phoebe Buffay", new Integer(1967), prompt }, { Boolean.FALSE, "Joey Tribbiani", new Integer(1967), prompt }, { Boolean.FALSE, "Chandler Bing", new Integer(1968), prompt }, { Boolean.FALSE, "Ross Geller", new Integer(1967), prompt } }; TableModel model = new DefaultTableModel(records, title) { public Class<?> getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; JTable table = new JTable(model); comboBox = new JComboBox(); comboBox.addItem("ごはん食べてる"); comboBox.addItem("テレビみてる"); comboBox.addItem("仕事してる"); comboBox.addItem("寝てる"); TableCellEditor editor = new DefaultCellEditor(comboBox); table.getColumnModel().getColumn(3).setCellEditor(editor); JFrame frame = new JFrame("Joey Table"); frame.getContentPane().add(new JScrollPane(table)); frame.setSize(640, 240); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println("選択されたコンボボックス:"+(String)comboBox.getSelectedItem()); System.out.println("選択されたコンボボックスのインデックス番号:"+comboBox.getSelectedIndex()); } }

    • ベストアンサー
    • Java
  • javaプログラミング

    Javaを勉強中の者です。 以下のソースを実行すると ------------------------------------------- item[0] = {10, true, true} item[1] = {11, true, true} ------------------------------------------- となります。 しかし、 ------------------------------------------- item[0] = {10, true, false} item[1] = {11, false, true} ------------------------------------------- が期待する結果です。 public class test{ public static void main(String[] args) { boolean[] b = {false,false}; Item[] item = new Item[2]; item[0] = new Item(10 ,b); item[1] = new Item(11 ,b); item[0].setCandidate(0, true); item[1].setCandidate(1, true); b = item[0].getCandidate(); System.out.println("item[0] = {" + item[0].getNumber() + ", " + b[0] + ", " + b[1] + "}"); b = item[1].getCandidate(); System.out.println("item[1] = {" + item[1].getNumber() + ", " + b[0] + ", " + b[1] + "}"); } } public class Item{ private int number; private boolean[] candidate = new boolean[2]; public Item(int number, boolean[] candidate){ this.number = number; this.candidate = candidate; } public void setNumber(int num){ number = num; } public int getNumber(){ return number; } public boolean[] getCandidate(){ return candidate; } public void setCandidate(int num , boolean candi){ this.candidate[num] = candi; } } おそらくcandidate[]が上書きされてる? 説明がうまくできません… 期待通りの結果にするにはどうすればよいのでしょうか?

    • ベストアンサー
    • Java
  • ネストされたオブジェクトを取得したい(Java)

    ↓の文はコードの説明です。 Seriesクラスのいう、数の列を入れるクラスを定義しています。 その中にはインスタンス変数Vector arrayがあります。 arrayの中には、Integerと、インスタンス化されたSeriesを入れます。 イメージを書くとこんな感じです↓ 単純にarrayの中身がIntegerのみの場合は、 series[5, 4, 12, 54, 17] のようになります arrayの中身にインスタンス化されたSeriesが入ると、 array[5, array[2, 3], 4] のようかもしれません。 実際のコードは、 import java.util.Vector; class Series{ Vector<Object> array = new Vector<Object>(0); Series(){ array.add(new Integer(5)); array.add(new Series(2, 3)); // ネスト array.add(new Integer(4)); // 全体のarrayを表示 System.out.println(array); // 入れ子になっているarrayを表示 (エラーになります) System.out.println(array.elementAt(1).array); } Series(int a, int b){ array.add(new Integer(a)); array.add(new Integer(b)); } } public class TestSeries { public static void main(String[] args){ new Series(); } } です。 // 入れ子になっているarrayを表示 (エラーになります) System.out.println(array.elementAt(1).array); を消去すれば、 出力結果:[5, Series@7f5f5897, 4] となります。 // 入れ子になっているarrayを表示 (エラーになります) System.out.println(array.elementAt(1).array); を実行した時の目標は 出力結果:[2, 3] となることです。 インデントがなくなって、読みづらいと思いますが、よろしくお願いします。

    • ベストアンサー
    • Java
  • Java初心者です。どうか教えてください><

    1週間ほど前からJavaの勉強を始めたものです。初歩的な質問で申し訳ないのですが、是非おしえていただきたくて投稿いたしました。 秀和システムからでている「わかりやすいJava入門編」を使って勉強しているのですが、課題の1つでつまづいてしまい、解決法がわからないので質問させていただきました。 課題の内容は以下です。 1、10本のうち3本が当たりで、最大10回引ける。あたりが出たら取り出す。3つ全てあたりが出たら終了。 2、eclipseのコンソール画面上から「キーをタイプすればくじが引けます」と表示、キーを入力すればくじ引き開始。 3、キー入力後0.1秒ごとに ■ が表示され、1秒後10個になった時点でくじ引き結果表示。 そこで、わたしは、まずint[ ]の配列を10個用意し、ループ分で[0]~[9]まで順にランダムに0~9の数字を入力し、 i番目の[i]に入っている数字が、それより以前の配列に入っている場合、[i]配列の抽選をやりなおす、というやり方でやろうと思って以下のような書き方をしたのですが、どうやら間違っているようで重複の場合のやり直しをしてくれません;; 初心者なので、見づらい書き方をしているかもしれませんがお許しください>< package exercise; import lib.Input; public class Lot_6 { static int[] lot = new int[10]; static int i; public static void main(String args[]){ int a = 0; for(int i=0; i < lot.length ;i++){ if (a < 3){ Input.getString("キーをタイプするくじが引けます"); animation(); do{ lot[i]=(int)(10*Math.random()); } while(isTrue()); if((lot[i] == 0) ^ (lot[i] == 1) ^ (lot[i] == 2)){ System.out.println("あたり"); a++; } else { System.out.println("はずれ"); } } else { break; } } } public static void animation() { for(int m = 0;m < 10;m++){ System.out.print("■ "); delay(100); } } public static void delay(int t) { try { Thread.sleep(t); } catch (InterruptedException e) { e.printStackTrace(); } } public static boolean isTrue(){ boolean is = false; for(int n=0;n <= i-1;n++){ if(lot[i] == lot[n]) is = true; else { continue; } } return is; } } そこで、間違っている箇所を調べるために do{ } while();ループの中にSystem.out.println(isTrue());を加え、if(a < 3) { }の内の最後にSystm.out.println(lot[i]);を加えました。 ちゃんと重複した場合isTrue()にTrueを返しているか、重複した場合やりなおしをしてくれているか、を調べるためです。 そしてコンソール画面の実行結果が以下です。 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 6 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 3 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false あたり 1 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 4 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false あたり 0 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 4 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 4 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 5 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false はずれ 9 [キーをタイプするくじが引けます] > ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ false あたり 2 数字が重複していますし、trueが一個もありません。 ということはisTrue()メソッドの部分で誤りがあるんでしょうか? public static boolean isTrue(){ boolean is = false; for(int n=0;n <= i-1;n++){ if(lot[i] == lot[n]) is = true; else { continue; } } return is; } こう書けば、lot[i]がlot[0]~lot[i-1]の間でいつでも重複しているものがあれば boolean is = true;により上書きされて、isTrue()はtrueが返されると思ったのですがそうはならないのでしょうか。 すいません。いろいろ手は尽くしたのですがどうしても分からなくて質問させていただきました。 ご回答いただけますとうれしいです><b

  • 再:助けてください

    消されてしまったので、もう一回w。 数字当てゲームを作ってコンパイルは出来たのですが、思い通りに動作しません。思い通りというのは数字を入力した後、判定する画面に飛ばしたいのですが、入力した数字が消えてしまいます。下にソースをさらします。で、800文字の字数制限がありますので、ソースの続きはどなたかが書き込んだ後、そこに補足と言う形で追加します。どなたかご教授願います。 <%@ page contentType="text/html;charset=Shift_JIS" %> <% int num;//正解の数字 boolean isRight;//解答が正解かどうか Integer numInt=(Integer)session.getAttribute("num");// Boolean isRightBoo=(Boolean)session.getAttribute("isRight");// if(numInt==null || isRightBoo==null){ //sessionオブジェクトに正解の情報がない isRight=true; }else{ //sessionオブジェクトより取得した値を使う isRight=isRightBoo.booleanValue(); } if(isRight){ //既に正解済、新たな正解の数字を乱数で決める num=(int)(Math.random()*13+1); isRight=false; session.setAttribute("num",new Integer(num)); session.setAttribute("isRight",new Boolean(isRight)); }else{ //sessionオブジェクトより取得した正解を使う num=numInt.intValue(); } %>

    • ベストアンサー
    • Java