Java入門・初心者質問スレ Part.3 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/04(火) 20:41:11.59ID:y0EcmGB0
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.2
http://echo.2ch.net/test/read.cgi/tech/1478863511/
2017/05/06(土) 08:30:46.24ID:9tv813Aq
>>274
Cだとそもそも宣言時以外はそう言う書き方出来ないんだが、そうか、クラスのフィールドだと宣言と初期化が別れるな。
宣言と同時に初期化する時のみの特別な記述としてnewしない記述は使える。
それ以外はnewしないとダメ。
説明が雑ですまん。
理由は基本型じゃ無いから。
ヒープに置くのは全てnewが必要で、記述上特別扱いは配列の宣言と同時に初期化する時と、文字列のみ。
Cなんて、宣言と初期化が別れたらforで一個一個配列に値を入れるしか無いって言う。。。
279265
垢版 |
2017/05/06(土) 11:15:43.19ID:gDC1nU6T
多くのレスありがとうございます。

エクリプスでは「配列定数はイニシャライザにおいてのみ使用可能です」と表示されました。
皆さんの言うように{1,2,3}という表記法は初期化時のみしか使えないということみたいです。
でも>>274の場合は初期化に相当しないのかな、と思うのですが…。
2017/05/06(土) 12:34:15.65ID:RxOQwEqu
宣言文の一部分である初期化子やろ
2017/05/06(土) 13:07:31.76ID:3Bn/MS7d
>>279
それは初期化であってる。
んで、newしなくて良いのは「宣言と同時に」初期化する場合のみ。
クラスのフィールドでint[] a;ってなってるのが宣言。
2017/05/06(土) 13:09:11.36ID:3Bn/MS7d
x int[] a;
o int[] hand;

人のコードよく読んで無かった。。。
2017/05/06(土) 13:44:30.80ID:jYP/Wf/9
>>279
ありがとう。
2017/05/06(土) 16:41:50.05ID:5R6Ql+c4
>>277
書き方違うだけでコードは同じように new する形式になっていると思うが。
というのは何れの書き方でも a[1] = 2; みたいに内容を後から変更可能だから。
ただし static の場合は書き換え可能なデータ領域に最初からインスタンスがあって
(つまりコンパイラがそれを含めた形でバイナリを作ってあって)そこへの参照を a に
代入するだけになるかも知れない。
static でない場合は普通に実行人ヒープに領域確保してからリードオンリーの
データ領域(コンスタントプール)から初期値をコピーしていると思う。
2017/05/06(土) 16:46:57.57ID:HAuELHoN
まあどうなってるか見たいならコード書いてコンパイルしてjavap通せ
286265
垢版 |
2017/05/06(土) 17:14:44.21ID:gDC1nU6T
>>281
そうなんですね、分かりました。

繰り返しになりますが、多くのレスありがとうございました。
2017/05/08(月) 17:19:02.28ID:C0kEGIYB
今日からjavaの本で学習し始めたんだけど

慣れたらpublicなんたらかんたらとか長い分も自分で一からかけるようになるの
2017/05/08(月) 17:24:11.64ID:3+foG7x1
IDEに生成させるもんだろ
2017/05/08(月) 18:34:23.43ID:YdKqfeaH
確かに自動生成されるけど、慣れるといつのまにか暗唱できるようになってる。
という感じ。
2017/05/08(月) 18:54:52.71ID:6xooNmVM
IDEでもテキストエディタでも入力補完機能があるから
わざわざ覚える事でもない
291デフォルトの名無しさん
垢版 |
2017/05/08(月) 20:55:56.19ID:epGpOLAg
>>287
なる。
1〜2秒ぐらいで打てるようになる。
2017/05/09(火) 08:36:16.33ID:wOo51I5g
まぁでも本で勉強してればmainメソッドの成り立ちなんてじっくりねっとり解説されるから嫌でも覚えちゃうよね
2017/05/09(火) 12:44:24.36ID:zagaBJts
画像解析のソフトを使うのにJava Library Pathを追加しないといけないのですがJavaをインストールした後の最初から躓いています(;;)
https://github.com/qupath/qupath/wiki/Working-with-MATLAB
この真ん中あたりに書いてある
Option #2: Control MATLAB from inside QuPath
-- Add MATLAB libraries to QuPath's Java Library Path
で,JVMOptionsをどうやって作ったらいいかわかりません

下記のページの最後「パスの設定は完了」ってところまでやったんですが..
http://techfun.cc/java/windows-jdk-pathset.html

関係ないソフトでてきてごめんなさい
2017/05/09(火) 12:49:33.75ID:zagaBJts
Win7 64bitです
2017/05/09(火) 16:18:51.10ID:iKf74YDS
>>293
なにがしたいのかわからん
そのソフト使いたいだけならexe形式のインストーラあるからそれ使えばええやん?
2017/05/09(火) 16:45:19.33ID:dAYvtASF
スッキリわかるjava入門でどこJavaじゃダメだからコマンドプロンプトっていうのを使ってくれって書いてあったんだけど、正直よくわからないからそのままnetbeansぇ続けても大丈夫?
2017/05/09(火) 18:01:00.16ID:xhqm65zv
そんなあなたにpaiza.io
2017/05/09(火) 18:28:25.96ID:zagaBJts
>>295
説明不足でごめんなさい
この2つのソフト(コマーシャルのMATLABとオープンのQuPath)はどちらも独立して使えてはいるんですが,片方のソフトからもう片方のソフトを呼び出せる機能があってそのことが書いてあるのが最初に添付したリンクです.
QuPath内にあるQuPath.cfgをJVMOptionに移動させるのが最初のステップなのですがそのJVMOptionが作りかたがわからないのです.
2017/05/09(火) 18:42:38.34ID:wOo51I5g
大丈夫大丈夫
これからも正直よく分からないところはどんどん飛ばしていけ
そうすれば正直よく分からないところで悩む必要無くなるから
2017/05/09(火) 19:45:49.93ID:41He4fJz
>>298
そもそもそのページがMATLAB → QuPath(op #1)とQuPath → MATLAB(op #2)の両方書かれてるのは理解してるよな?
op #1はMATLAB側の環境を整えてる
同#2はQuPath側だな

んで問題の箇所は簡単に済ませるならjava.library.pathをQuPath.cfgの中に記述しろって書いてるだろ?
実際のファイル見てないからわからんが、テキストエディタで見れば最低でも[JVMOptions]の行はあるだろうから、その下に追記してやればいい
例で書かれてるのはMAC版みたいだから自分の環境に合わせて書き換えろよ
2017/05/09(火) 20:00:45.39ID:dAYvtASF
public class 素数判定 {
public static void main(String[]args)
{
int sum=0;
int a =new java.util.Scanner(System.in).nextInt();
System.out.print(a+"=");
int m=a;
boolean test=false;
for(int i=2;i<=a;i++){
if(a%i==0){
if(m!=a){
test =true;}
while(a%i==0){
a=a/i;
sum++;
}
if (sum!=1){
System.out.print(i+"^"+sum+"・");}
else{
System.out.print(i+"・"); }
sum=0;}
}
if (test==false){
System.out.println("\n"+m+"は素数です!");
}}}

書いてみたのだがすっきりしない
式の最後によけいな「・」が出てしまうし、iのループ中で一回でもtrueが出ればそのあとは判定しなくていいわけだし
改良点があれば教えてほしい
2017/05/09(火) 20:18:00.56ID:smTpNxH0
インデントおかしいし変数名分かりづらいし
2017/05/09(火) 20:28:39.39ID:/JePIrk9
>>301
trueになった時点でbreakしたら素因数分解できないでしょ
2017/05/09(火) 20:32:53.06ID:dAYvtASF
>>303
そう
だからtrueを判定する適切な場所がどこだかわからない
2017/05/09(火) 20:42:22.15ID:60ZWnyEc
100が素数かどうか調べる時は√100まで
つまり2〜10でええんやで
2017/05/09(火) 20:45:33.38ID:dAYvtASF
>>305
ルートを出してその整数部分だけ使えばいいのか
そういうの出来たっけ?
2017/05/09(火) 20:51:57.55ID:SmlWSda1
Math.sqrtの結果をintキャスト
2017/05/09(火) 20:55:23.79ID:dAYvtASF
>>307
なるほど!ありがとう
309デフォルトの名無しさん
垢版 |
2017/05/09(火) 22:29:03.24ID:ivwxgVxg
>>301
「・」は出すように書いてあるからその通りに出てくるだけ
310デフォルトの名無しさん
垢版 |
2017/05/10(水) 01:27:24.94ID:BYWHw2Iq
プログラミングっていうかゲーム作りって言ったらGUIとかアニメーションを使うのが一番に出て来ると思うんだけど、javaのコーディングでできるものなの?
2017/05/10(水) 02:06:28.58ID:qeZ1bcfg
>>301
4も8も素数と出るのだが・・・
2017/05/10(水) 02:07:09.79ID:qeZ1bcfg
>>310
できる。
2017/05/10(水) 02:24:21.40ID:k+Fw34TB
エラトステネスのふるい懐かしい
2017/05/10(水) 02:25:43.59ID:7vBaEDXu
いやエラトステネスの篩いま関係ないっす
2017/05/10(水) 09:46:36.96ID:BYWHw2Iq
>>311
そうなんだよね
自分もそれを投稿した直後に気付いた
If(m!=a)をif(m!=i)にしたら直った
累乗の数はそうなっちゃってたみたい



今はネットビーンズでプログラミングしてコンソール上で処理を表示させてるんだけど普通のアプリと同じようにダブルクリックして起動させるようにするにはどうしたらよいの?
316デフォルトの名無しさん
垢版 |
2017/05/10(水) 12:42:35.37ID:3FTnTomt
>>315
jarファイルのMANIFEST調べろ
2017/05/10(水) 13:21:55.97ID:GZ1G5LqK
>>310
例えばMinecraftはJavaとOpenGLのライブラリを使って書かれている
2017/05/10(水) 19:54:36.55ID:39V1aTUU
>>293-300
MATLAB は、Python だろ

The Jupyter Notebook ( IPython )
ブラウザで、tmpnb
319デフォルトの名無しさん
垢版 |
2017/05/11(木) 16:34:47.91ID:a7kjTynb
2017/05/11(木) 16:36:18.38ID:a7kjTynb
クラスのフィールドとかメソッドを書き換えられないようにfinalをつけるっていうけどソースコードそのものを渡さないとクラスが使えないだろうしfinalを外したりするのは自由にできてしまうのではないの?
2017/05/11(木) 16:50:23.23ID:eS2L0WVj
>>320
いいやコンパイルされたクラスにシンボル情報が付いてるからソース無くても使える

余談だかこれのせいで逆コンパイルしやすいそうな
2017/05/11(木) 20:02:59.23ID:90G5iBS0
継承について質問させてください
public class Parent{
public void hoge(){ System.out.println("p_hoge"); }
private void piyo(){ System.out.println("p_piyo"); }
}

public class Child extends Parent{
public void hoge(){ System.out.println("c_hoge"); }
public void piyo(){ System.out.println("c_piyo"); }
}

public class Main {
public static void main(String[] args) {
Child child1 = new Child();
Parent child2 = child1;
child1.hoge(); // c_hoge
child1.piyo(); // c_piyo
child2.hoge(); // c_hoge
child2.piyo(); // error: piyo() has private access in Parent
}
}

ここで、child2.piyo()がコンパイルエラーになるのは何故でしょうか
確かに型はParent型ですが、単にChildインスタンスへの参照を代入しただけなので
関係ないかと思ったのですが
実際child2.hoge()はChildクラスのhogeメソッドを実行してますし、Parentクラスの
piyoメソッドのアクセス制限をpublicにするとchild2.piyo()は「c_piyo」を出力します
あるいは Parent child3 = new Child();としても同じ結果でした
コンパイルの際、型情報はどういう順番でチェックされているのですか?
323デフォルトの名無しさん
垢版 |
2017/05/11(木) 20:24:14.54ID:qSTwHBOZ
>>322
こんパイル時は単純に変数が何クラスなのかしか見てなくて、それの場合はParentクラスだからその定義を見てpiyo()メソッドはprivateだからエラーにしてるだけ。
2017/05/11(木) 20:33:32.16ID:90G5iBS0
>>323
なるほど、コンパイル時は型情報のみでチェックをして、中身は実行時に初めて見てるのですね
参考書の「実行時のインスタンスを想像しながらプログラムを書いてはいけない」という意味がようやくわかりました
ありがとうございます
2017/05/12(金) 00:38:23.02ID:55apZTWp
エクリプスやコマンドプロンプトから別ウインドウを開いてシンプルな折れ線グラフを表示したいのだけど、何をどうすればいいかわかりません。
swingとかいうのを使えばいいのでしょうか?
2017/05/12(金) 02:22:52.66ID:Otw8y3gH
System.exit(1);(数字は任意)はなるべく使わない方がよいのでしょうか?
2017/05/12(金) 06:49:04.24ID:84Td0x+H
>>326
その数字は終了ステータスと言って0以外だと異常終了したって扱いになるからちゃんとしたコマンドを作るなら使い分ける必要がある
328デフォルトの名無しさん
垢版 |
2017/05/12(金) 14:49:58.50ID:LGrn4Vkx
メソッドの中カッコ(インデント)は改行しないで書くのが習わし?

あと、次の処理を行うまで2秒とか時間間隔を置くコードがあれば教えて欲しい
2017/05/12(金) 15:28:45.71ID:LGrn4Vkx
もう一個質問
クラスから作ったインスタンスって他でも利用できる?
メインでheroクラスのhを作ったとしてhのhpがあるメソッドによってデフォルトの100から50減ったとする
他のメインで呼び出した時hpが50減ったまま反映されてるのかな
2017/05/12(金) 15:37:25.98ID:LGrn4Vkx
つまり

public class main {
public static void main(String[]args){
wizard w =new wizard();
matango m=new matango('あ');
w.name="タカ";
w.attack(m);
w.fireball(m);
System.out.println(m.hp);
}
}
こういうコード書いてるんだけどこれだと毎回実行するたびに新しいmatangoが生成されてhpも全てリセットされちゃうんだ
メソッドで実行したこういう情報を保持しておきたい
他のメインメソッドで一番最後の行のmatango.m..hpをsystemoutしようとしたら変数が見つかりませんってなっちゃう
2017/05/12(金) 16:17:48.87ID:8okmpAdZ
実行時引数で受け取るor外部ファイルor共有メモリ
後何があるかな
2017/05/12(金) 16:37:05.11ID:QfK6Pl49
外部プログラムに情報を渡したいってこと?
いろんなとこで使うならDB保存でもすればいいんじゃないかな
2017/05/12(金) 18:10:13.38ID:80n6+mfo
Javaの公式リファレンスは
https://docs.oracle.com/javase/jp/8/docs/api/index.html
これしかないのでしょうか?

出来れば実際にメソッドを使った時の挙動も示してある物が見たいのですが、どこにも見当たらないもので・・・・・・
2017/05/12(金) 18:18:07.13ID:84Td0x+H
>>333
公式はそれだけ、クラス名やメソッド名でググるしかないよ
2017/05/12(金) 18:22:29.06ID:80n6+mfo
>>334
マジですか・・・・・・
プロの人はこれで動きが分かるのでしょうか

とりあえずはクラス名とメソッド名でググるようにします、ありがとうございます
2017/05/12(金) 18:24:57.87ID:84Td0x+H
Pythonのリファレンスとかが詳しすぎるだけで本来こんなもんだよ、(多分俺の読解能力が腐ってるせいで)意味不明だからソース読みにいったりすることがよくある
2017/05/12(金) 18:28:04.48ID:80n6+mfo
>>336
Rubyのリファレンスみたいなのを想像していたので戸惑いました・・・・・・
もし詳細な言語仕様が書かれた書籍などがあればそれも知りたいです
2017/05/12(金) 18:28:26.99ID:LGrn4Vkx
外部に渡すっていうより、 
public static void main(String[]args){}の中に一緒に記述してたらインスタンス(勇者)を作るのと敵と戦うが同時に起きてしまって、敵にHPを減らされてもまた同じメインを実行したら勇者のHPも最初からにりせっとされちゃうじゃない
ゲームで言うセーブみたいな機能ってjavaでどうやって実現するのかなってずっと気になってた
2017/05/12(金) 18:42:20.75ID:tAeUMPRn
>>330
matango m を new してるから生成される
matango型の変数をグローバル(?)なところに保存しておいて、どこかで new してそれを再利用しよう
2017/05/12(金) 19:39:12.19ID:8okmpAdZ
>>338
それもう外部ファイルに状態を保存しかなくね
341326
垢版 |
2017/05/12(金) 19:54:24.39ID:Otw8y3gH
>>327
ありがとうございます。

この命令を使う是非についてもどなたか教えて頂けないでしょうか?
2017/05/12(金) 20:50:18.79ID:5vkuZfot
>>341
是非とは? 327が書いてる通りだと思うよ
必要なら使うし、いらないなら使わない
2017/05/12(金) 21:02:08.92ID:84Td0x+H
>>341
シェルスクリプト等のバッチ処理でコマンドが正常終了したとかの判定に使われるステータスだからそういう用途に使うならちゃんとしとけ、それ以外なら適当でいい
2017/05/12(金) 23:25:25.16ID:Otw8y3gH
>>342 >>343
例えば、ジャンケンをするプログラムです。
https://ideone.com/EK5omF
このように気軽に用いてよいでしょうか?
2017/05/12(金) 23:29:51.49ID:84Td0x+H
>>344
おk、UNIXのコマンドで実際にヘルプ出した後に1返すやつあるし
346326
垢版 |
2017/05/13(土) 01:04:29.17ID:0v4JDuG/
>>345 >>他レスくれた方
ありがとうございました。気軽に使おうと思います。
347デフォルトの名無しさん
垢版 |
2017/05/13(土) 13:16:21.43ID:nXg2xudY
あー。学校の課題かな?
これから switch 習うところみたいな。
2017/05/13(土) 15:09:30.58ID:nn66e6lH
>>347
>>326はプログラマ目指してる34歳発達の無職だよ
あんまり相手にしない方がいい

↓のスレの774とIDが一致

ねねっちと一緒にプログラムを勉強するスレ第2話 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489809785/

↑と↓でトリップが一致

34歳、発達障害の無職ですが…5 [無断転載禁止]©2ch.net
http://tamae.2ch.net/test/read.cgi/prog/1492326920/
2017/05/13(土) 15:20:15.97ID:AEmw9vXq
Javaリファレンスを読み始めたのですが
フィールドのサマリーやメソッドのサマリーというのは一体なんなのでしょうか?
java.lang.Systemを見るとフィールドのサマリーの方は
System.[out]←これの事を説明しているのは分かったのですが
メソッドのサマリーの方は検討もつかず・・・・・・
350デフォルトの名無しさん
垢版 |
2017/05/13(土) 16:33:51.59ID:nXg2xudY
>>349
サマリーって要約だろ?
それが何か?
351326
垢版 |
2017/05/13(土) 16:58:01.94ID:0v4JDuG/
>>348
あー余計な事書かないでー。

なんかすいません、学生じゃないんです。
ここは速やかに返答が得られるので、使わせて頂いてます。
2017/05/13(土) 17:03:10.28ID:AEmw9vXq
>>350
あ、本当にただの要約なんですね
わざわざ「サマリー」で表記してあったので、てっきり特別な意味があると思ってしまいました・・・・・・
2017/05/13(土) 17:38:29.56ID:GZKqOPY+
>>352
Javaのリファレンスって、翻訳が直訳気味だから、英語の方読んだ方がマシな場合もあるよ
2017/05/13(土) 22:39:40.42ID:a+Yyd3LZ
今はmetbeansを開いてメインメソッドを書いて、ファイルの実行ボタンを押して起動させてるけど
ファイルをダブルクリックで開いたらこのアプリケーション起動、みたいなコマンドって作れる?
Fileクラスでオープン、そしてテキストファイルに書き込みとかは一応出来るようになった
2017/05/13(土) 23:32:38.00ID:GC0/nJum
それはOSの機能。
ファイルにアプリを関連付ける。
2017/05/13(土) 23:34:07.61ID:GC0/nJum
あと、ダブルクリックで起動するGUIアプリはJavaだとJarファイル作る。
作り方はググってくれ。
2017/05/14(日) 09:13:39.78ID:GiIrdLHV
NETBEANSなら自動でJarファイル作るけど、
自作のJarを継承したりするとJarの中にフォルダを作って入れてはくれないので、
やっぱり自分で作るかな
358デフォルトの名無しさん
垢版 |
2017/05/14(日) 17:33:23.51ID:QSKs3vuK
>>354
>>316
2017/05/14(日) 22:40:11.72ID:neLc5GA+
トランプを作りたいのだが多次元配列で組み合わせようと思ったけど結局1をAにしたり11、12、13をJQKにしたり、
あとは例えば二枚のカードを合計するってなった時は2+3とかじゃなくてハートの2たすクラブの3っていう感じになって計算ができないんじゃ無いかってところで行き詰まってる
ネットで調べたらenumって出てきたけど最後に;を記述してないし使い方がよくわからないのだ

何か知恵を貸してくれないか

欲を言えばトランプの絵の中にそれら配列(もし配列を使うとしたら)の要素一個一個に当てはめる的な事もしたいけどそれはまた後で調べる、これは出来るかできないかだけでいいから教えてくれ
2017/05/14(日) 22:41:34.73ID:neLc5GA+
トランプのどんなゲームにも使えるカードクラスって簡単に定義可能なの?
2017/05/14(日) 22:52:56.19ID:ztp16LZQ
>>360
Suits列挙とNumber列挙、それらを持つCardクラス作るだけやん
2017/05/15(月) 00:22:18.88ID:F3iBT9nS
>>360
例えばハートの6とクラブの9を足して15にできる?多次元配列でint 部分の配列を取り出す事とかできるの?
2017/05/15(月) 00:28:40.14ID:oAljGLAm
>>362
二次元配列でも良いけど
そういうのだったらHashMap使った方が早くね?
2017/05/15(月) 01:05:18.25ID:F3iBT9nS
>>363
どうして?HashMapって配列番号を文字にしただけでしょ?
2017/05/15(月) 01:14:15.51ID:Hm7XRpaa
javaやってるのに多次元配列使う奴なんて見たことない
c言語じゃないんだから
2017/05/15(月) 08:01:13.47ID:iwHegv+w
HashMapは文字通り中にハッシュテーブルを持っててそれを利用して探索するから配列を探索するよりとても速い
367デフォルトの名無しさん
垢版 |
2017/05/15(月) 10:32:21.13ID:WBt6bwRo
>>359
面倒なら数値だけでやればいいじゃん。内部では0〜51で値持っといて13で割った値が種別、13で割った余り+1がカードの番号みたいにして。
2017/05/15(月) 14:11:56.96ID:YV/XJMDJ
javaでif文を使って文字列か数字か判断する時の条件式って何?教えてくれ頼む!!
2017/05/15(月) 15:05:38.35ID:YV/XJMDJ
if(入力値 == String){
//処理
}else if {
//処理


上記のやり方じゃ駄目だよな?
2017/05/15(月) 16:29:33.70ID:oRDR+P6W
instanceof
2017/05/15(月) 16:31:44.87ID:+sV7Di0p
parseIntじゃだめですかい?
String input = "12345"

try
{
int i = Integer.parseInt(input);
} catch (Exception e) {

}
2017/05/15(月) 16:59:39.84ID:LmqNwbQD
>>368
入力値 instanceof Stringでおk
2017/05/15(月) 17:03:33.71ID:LmqNwbQD
>>368
間違えたすまん、371のやり方じゃないと
2017/05/15(月) 17:11:06.15ID:YV/XJMDJ
>>371 >>373
ありがとう。やっぱtry文でやらないと出来ないのか
2017/05/15(月) 17:36:48.54ID:9QbDhZRz
ルークregexを使え
2017/05/15(月) 18:11:19.72ID:Nyf5aX+C
1文字ずつ正規表現でチェックするとか
377デフォルトの名無しさん
垢版 |
2017/05/15(月) 21:23:38.19ID:94d7jC/v
>>366
Hash mapって確かに原理はわかるんだけど、hash関数にキーを通して得られた数値をアドレスにすると、アドレス飛び飛びになってメモリ効率悪くなったりしないのかね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況