Java入門・初心者質問スレ [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2016/05/12(木) 05:18:33.40ID:nzHoBPh80952デフォルトの名無しさん
2016/11/03(木) 23:58:11.81ID:g7gHuu9b0953デフォルトの名無しさん
2016/11/04(金) 00:10:29.41ID:9L4bsxNEその外こんなのも駄目で
javaのバージョンが良くないのか自分を疑うべきなのか
http://i.imgur.com/Ehiljd7.jpg
0954デフォルトの名無しさん
2016/11/04(金) 00:12:46.15ID:tO492IJ7おい普通にいけたぞ
xxx\Calc> C:\Program Files\Java\jdk1.8.0_92\bin\javac" calcapp.main\Calc.java calcapp.logics\CalcLogics.java
0955デフォルトの名無しさん
2016/11/04(金) 02:46:44.66ID:A/+Iym3tクラスローダーの動作原則
パッケージ階層と全く同じ、ディレクトリ階層を作って、そこにクラスファイルを置く
こういう環境構築が難しいから皆、paiza.IO, codepad などで、ブラウザから実行する
0956デフォルトの名無しさん
2016/11/04(金) 08:55:17.07ID:hTUXm8GAディレクトリ構成を見せてくれ
0957デフォルトの名無しさん
2016/11/04(金) 12:13:16.04ID:0ltYjQIhCLASSPATH には calcapp.main や calcapp.logics そのものではなく
それらの上のディレクトリを指定するんだぞ。
そしてコンパイルも実行も calcapp.main や calcapp.logics に
降りてはダメなのもわかってるのか?>>954 みたいにするんだぞ。
0958デフォルトの名無しさん
2016/11/04(金) 20:13:25.77ID:9L4bsxNEわざわざ試していただいてありがとうございます!
>>953
については成功しました
WOKS¥Main2¥hontai¥Main2.java
WOKS¥Main2¥comment¥Zenhan.java/Kouhan.java
という構成でMain2をCLASSPATHでMain2.javaをjavacして成功
JVMの性質を考えると納得できます
しかし同じ構成のCalc
WOKS¥Calc¥calcapp.main¥Calc.java
WOKS¥Calc¥calcapp.logics¥CalcLogic.java
でCalcをCLASSPATHにしてCalc.javaをjavacしても何故かcalcapp.logicsは存在しませんといった状況です
正直練習問題の初めて作ったMain2がうまく動作しなくて確実に動くだろうCalcを動作確認のため作ったらMain2の方だけ実行できて本末転倒状態です
0959デフォルトの名無しさん
2016/11/04(金) 20:31:51.14ID:4SeM2Q5g.(ドット)はパッケージの区切りを示すものなので、
WOKS\Calc\calcapp\main\Calc.java
WOKS\Calc\calcapp\logics\CalcLogic.java
こうやって
calcappの下にmainとlogicsの階層を作らないといけないよ
0960デフォルトの名無しさん
2016/11/05(土) 01:48:38.64ID:0FZEaghzに書いてあるページを、読んでからやれ。
ここに書いてある通りにやれ
本を読まずに、やるな
0961デフォルトの名無しさん
2016/11/05(土) 04:53:30.02ID:edcXpxnVいいか。まず Calc ディレクトリの下に calcapp っていうディレクトリを作れ。
それから calcapp の下に main と logics っていうディレクトリを作れ。
その main の下に Calc.java を置け。logics の下には CalcLogic.java を置け。
で、コマンドプロンプトでカレントディレクトリを Calc ディレクトリに移動した後で、こうする。
javac calcapp\main\Calc.java calcapp\logics\CalcLogic.java
するとそれぞれのソースと同じディレクトリにクラスファイルが作られる。
この時の環境変数 CLASSPATH は Calc ディレクトリになっていてもいいが、なってなくてもいい。
というのは javac ではカレントディレクトリは自動で CLASSPATH に含まれるからだ。
で、実行はそのまま Calc ディレクトリでこうする。
java calcapp.main.Calc
この時もし CLASSPATH に何かがセットされていてそれがカレントディレクトリを含まない
場合はエラーになる。かといって CLASSPATH を一々セットし直すのは面倒だ。
という場合はこうする。
java -cp . calcapp.main.Calc
この -cp で指定している . (ドット) はカレントディレクトリだ。これで CLASSPATH に
カレントディレクトリを指定した上で実行したことになる。またドットの代わりにカレント
ディレクトリの絶対パスを指定しても同じになる。更にそのように絶対パスで指定
するならカレントディレクトリをどこに移動しても実行できる。
0962デフォルトの名無しさん
2016/11/05(土) 13:27:53.71ID:mhverHUI>>959
>>957
まさに試そうとしたところで丁寧に教えていただきありがとうございます!
実は
>>950
のコメントを頂いたときに似たようなことを試したんですがうまく行かなくて
これこらもう一度試すんですが、calcapp.mainやcalcapp.logicsみたいに"."が入るパッケージ名自体は不正じゃないんですか?
パッケージ名を修正しなかったから失敗したのかと思ったんですが
0963デフォルトの名無しさん
2016/11/05(土) 13:32:23.18ID:0pOl8O7Nパッケージ名が aaa.bbb.ccc だとしたら
ディレクトリー構造が aaa\bbb\ccc になる
パッケージ名のドットを\に置き換えたのがpath
0964デフォルトの名無しさん
2016/11/05(土) 15:17:41.43ID:edcXpxnVjava コマンドで実行するクラスを指定する時は区切りのドットに代わりに / で書くこともできる。
しかし \ はできない。つまり java calcapp.main.Calc で実行できるなら java calcapp/main/Calc でも実行できる。
しかし java calcapp\main\Calc はできない。
これはおそらくSunがJavaを作っていた当初は UNIX (Solaris) 使っていたことの名残だと思う。
(UNIXではディレクトリの区切り文字は / を使う)。
0965デフォルトの名無しさん
2016/11/05(土) 15:29:17.38ID:mhverHUI>>963
通りました!本当にありがとうございます!
一つだけ疑問が残ってるんですが、Main2プログラムの方はMain2だけを指定、
つまりMain2をCLASSPATHでMain2.javaだけでjavacする事が出来たのに対してCalcの方は
>>961
にあるように javac calcapp\main\Calc.java calcapp\logics\CalcLogic.java
と二つのクラスを指定してjavacしないと通らないのには何か明示的な理由があるんでしょうか?
極端な話プログラムによっては大量のクラスをコンパイル時に指定する必要があるのかという疑問が浮かびます
0966デフォルトの名無しさん
2016/11/05(土) 15:56:23.66ID:yMN3xLAC0967965
2016/11/05(土) 16:00:02.68ID:yMN3xLAC程度です。
0968デフォルトの名無しさん
2016/11/05(土) 17:16:29.78ID:anO0HCtb依存してるからだよ。Calcクラス内からCalcLogicを使っているからコンパイラはCalc.javaコンパイル時にCalcLogicクラスのことがわからないとダメだ。
つまり先にCalcLogicがコンパイルされてクラスファイルになっている必要がある。
で、依存関係のあるクラスをCLASSPATHを起点とするディレクトリ以下でコンパイルする時に全て指定した場合はコンパイル順序は自動で考慮してコンパイルしてくれるってこと。
もし依存がないならひとつづつ順序考慮せずにコンパイルすることも可能だ。
ただ場合によっては大量のソースを一度にコンパイルする必要があるわけだが、その場合はコマンドラインに書ききれないならテキストファイルにスペースまたは改行区切りでファイル名を並べて書いておいて javc の引数で @ 付けてそのファイルを指定するという方法が使える。
これはWindows用javcだけの機能かも知れない。昔からDOS用コマンド等でやられてきた方法だ。DOSは引数の文字列制限がとても小さかったからね。
UNIX系OSではそんなこと考えずシェルスクリプトに引数並べちゃえばいいんだけどね(見辛い場合は行末に \ 入れて次の行と繋がってる事にする)。
0969デフォルトの名無しさん
2016/11/05(土) 17:20:04.72ID:anO0HCtb0970デフォルトの名無しさん
2016/11/05(土) 17:23:33.18ID:Vdk40yXvバッファせずに出力したいなら
Writer out = new OutputStreamWriter(System.out);
でいいのではと思ったら、そもそもそういう話ではなく、毎回flushを呼ぶ必要がある
http://ideone.com/rHtUIO
0971デフォルトの名無しさん
2016/11/05(土) 18:00:46.58ID:zg/6JUlg参考
http://d.hatena.ne.jp/Kappuccino/touch/20080731/1217480162
0972デフォルトの名無しさん
2016/11/06(日) 02:21:03.04ID:nNdE2u+1System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
0973デフォルトの名無しさん
2016/11/06(日) 11:44:21.04ID:4ZaT28cBどのみち実務では利用する機会のないネタだね、いわゆるトリビア
0974966
2016/11/06(日) 12:40:21.24ID:jofbsDf+ありがとうございます。読ませていただきます。
OutputStreamWriterはnioのcharBufferとbyteBufferでバッファリングしながら
エンコードしているようなので、>>970さんのおっしゃるように駄目でした。
>>972
ありがとうございます!FileOutputStream(FileDescriptor.out)で出来るように
なりました!FileOut〜は直接native writeを呼んでいる様でした!
0975デフォルトの名無しさん
2016/11/06(日) 19:21:27.22ID:rNdTzEdKなるほど依存によってはコンパイル順で指定する必要がある訳ですね
つまりJVMの優先順位次第だけど基本的には全部指定した方が無難そうですね
今回つまづいて皆さんに助言をいただいたおかげでかなりJVMとコマンドプロントについての理解が深まりました。ありがとうございます!
いずれは統合開発環境を使うと思いますがやっぱり基本構造は理解したいのでこのままコマンドプロントでもう少しやってみます
0976デフォルトの名無しさん
2016/11/06(日) 20:38:06.30ID:5/z3Ppl40977デフォルトの名無しさん
2016/11/07(月) 02:12:01.71ID:LVMUK9Ip0978デフォルトの名無しさん
2016/11/07(月) 04:50:06.17ID:4jym6VdeJavaというかこのスレにね。
C++のスレカオスだよ。
0979デフォルトの名無しさん
2016/11/07(月) 13:28:02.93ID:f+d8GbUt0980デフォルトの名無しさん
2016/11/07(月) 13:40:01.53ID:/8UUm0jPhttp://www.htmq.com/html/input_hidden.shtml
0981デフォルトの名無しさん
2016/11/08(火) 18:43:02.58ID:jUCVZHcMC++は基地外ばっかです
0982デフォルトの名無しさん
2016/11/09(水) 20:10:07.13ID:loi9raWA0983デフォルトの名無しさん
2016/11/09(水) 22:31:54.88ID:f1pFjyzB文字列は複数なので必然的に配列になってしまうような気もするのですが
前者に格納できていれるのでなぜなのかと
0984デフォルトの名無しさん
2016/11/09(水) 23:28:39.36ID:kFU4IgnSString自体がjava開発者がそういう風に文字を扱えるように作ったクラスの集合体だから
そして頻繁に使うからStringと書くだけでそのクラス集合体を呼び出せるようにちょっと特別扱いした
と後々説明されます
0985デフォルトの名無しさん
2016/11/10(木) 00:20:10.42ID:VI/Gf6Nq他の基本の型とは違う扱いということで理解すればいいのでしょうか。
0986デフォルトの名無しさん
2016/11/10(木) 01:19:11.86ID:mM/8alJk0987デフォルトの名無しさん
2016/11/10(木) 08:47:44.97ID:vUqiNNag会場はわかったんだけど試験日って決まりあるのかな
申し込めばいつでも受けれるって認識で大丈夫?
0988デフォルトの名無しさん
2016/11/10(木) 15:17:20.49ID:yQ+SgR9xあなたにそれが必要であれば
0989デフォルトの名無しさん
2016/11/10(木) 15:31:46.08ID:yQ+SgR9xString は一応普通のクラスだ。ただし頻繁に使われることを考慮して初期化などは楽にできるように言語レベルでサポートされている。
それと、CやC++での char * での文字列操作については忘れろ。それとは全く違うものだと思って最初から入門書等をよく読んでどういうものか覚えろ。
表現が似ているからといってわかったつもりになってはいけない。そうするとハマる。
0990デフォルトの名無しさん
2016/11/10(木) 21:18:04.76ID:mM/8alJkそれ以外をelseで処理してるパターンとif構文外で処理してるパターンがあるのには何か意味があるんですか?
具体的には12行目はelse、19行目、26行目、33行目はelse無し
自分で考えてるときは指定したい条件をifで弾いてそれ以外はelseで処理すると思ってたけど考えてみればifに引っかからなければそのまま下に進むやり方でも結果一緒でならelseいらないじゃんとか思ったり
そもそもここで使い分けてる理由がわからないです
http://i.imgur.com/WQ0EiAg.jpg
0991デフォルトの名無しさん
2016/11/10(木) 21:27:54.75ID:FNhtM1mhif で引っ掛かった時に throw で必ずメソッド抜けてしまうやつはelseなしってだけのこと。
0992デフォルトの名無しさん
2016/11/10(木) 21:36:52.16ID:mM/8alJkなるほど、ifの処理内容の問題だったんですね
スッキリで基礎は勉強できるけどAPIはまだ全然なんでまずAPIを疑うべきでした
0993デフォルトの名無しさん
2016/11/11(金) 00:29:13.33ID:Y+Bz51WV0994デフォルトの名無しさん
2016/11/11(金) 00:41:49.70ID:Y+Bz51WV0996デフォルトの名無しさん
2016/11/11(金) 09:22:15.80ID:YwN9JhrQ仕事の内容によっては細かく全て知る必要がある。
しかしだいたいの仕事では現在住んでる国のlocaleでのローカルタイムの文字列出したり読んだり出来れば良い程度だと思う。
せいぜいこれに3日後は何日かとか、生年月日から計算して今日で何歳何ヵ月かみたいな計算が伴うぐらい。
0998デフォルトの名無しさん
2016/11/11(金) 20:26:15.01ID:zFksT2KiJava入門・初心者質問スレ Part.2 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1478863511/
0999デフォルトの名無しさん
2016/11/12(土) 16:53:04.67ID:KzeRaaZ81000デフォルトの名無しさん
2016/11/12(土) 16:53:18.10ID:KzeRaaZ810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 184日 11時間 34分 45秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。