トップページ⇒tech
1001コメント273KB

★★Java質問・相談スレッド165★★

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/20(日) 19:30:39.35
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

前スレッド
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
0083デフォルトの名無しさん2013/10/27(日) 00:01:09.25
java6でもそうだっけ
0084デフォルトの名無しさん2013/10/27(日) 00:07:49.07
実装次第と言えばそうなんだが、
C系の静的言語の設計ではブロック変数を>>82のように実装するのが大々大前提だからね
よほど今と大きく異なるアーキテクチャのマシンで動かすのでもない限りは変わることはありえない
0085デフォルトの名無しさん2013/10/27(日) 00:30:51.25
>>81
30分ぐらい探してたので、ないと言ってもらえて助かりました。

private String fomatSecound(int secound){

int h = secound / 3600;
int m = (secound - (h * 3600)) / 60;
int s = (secound - (h * 3600) - (m * 60));

String duration;
duration = h == 0 ? "" : h + "時間";
duration = m == 0 ? duration : duration + m + "分";
duration = s == 0 ? duration : duration + s + "秒";

return duration;

}
こんなコード書いたんですけど、
もっとスマートな方法あったら教えてください。
0086デフォルトの名無しさん2013/10/27(日) 00:57:47.01
jettyでspring3を使おうと思うのですが、怒られてしまいます。
何か設定が悪いからなのでしょうか?

SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: NULL
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
0087デフォルトの名無しさん2013/10/27(日) 02:40:28.26
軽く調べてみたらSpringの各コンポーネント間のバージョンのコンフリクトが
原因で起こっている事例がいくつか。
0088デフォルトの名無しさん2013/10/27(日) 03:13:17.33
>>85
無いのなら自前で作ったものをライブラリとして公開するとかしたらとても
0089デフォルトの名無しさん2013/10/27(日) 03:23:50.94
おし!ライブラリ公開だ!

class TimeFormater
{
  
  public static void main(String[] args) {
    int s = TimeFormater.toSeconds(7, 33, 55);
    System.out.println(TimeFormater.format(s));
    
  }
  
  public static int toSeconds(int hours, int minutes, int seconds) {
    return 3600 * hours + 60 * minutes + seconds;
  }
  
  public static String format(int seconds) {
    int h = seconds / 3600;
    int m = (seconds / 60) % 60;
    int s = seconds % 60;
    return (h > 0 ? h + "時" : "") + (h + m > 0 ? m + "分" : "") + s + "秒";
  }
  
}
0090デフォルトの名無しさん2013/10/27(日) 03:28:32.61
>89

つ Joda PeriodFormatter
0091デフォルトの名無しさん2013/10/27(日) 03:33:30.93
>>85
"Java time pretty print"でググればそれなりに方法は出てくる。
あと時刻に関してJavaでちょっと凝ったことをする場合はJodaが定番。
0092デフォルトの名無しさん2013/10/27(日) 03:42:09.10
Joda便利杉ワロタ

Joda-Time - Java date and time API - Home
http://www.joda.org/joda-time/index.html
0093デフォルトの名無しさん2013/10/27(日) 03:54:18.30
>>92
これはいいかも!
Calendarにはガバガバメモリーリークしてるバグがあるからなw
0094デフォルトの名無しさん2013/10/27(日) 04:28:13.28
ヨーダのステマ
0095デフォルトの名無しさん2013/10/27(日) 04:29:18.51
>"Java time pretty print"でググればそれなりに方法は出てくる。

英語で検索とは・・・日本語圏での情報は少ないってことか
0096デフォルトの名無しさん2013/10/27(日) 05:31:30.09
ちなみにCalendarを1つインスタンス化する度に600kbメモリーリークしてたと記憶している。
0097デフォルトの名無しさん2013/10/27(日) 05:35:57.85
英語の方が情報がたくさんあるというのもあるけれども、この手の「読みやすい文字列として
出力する」という操作はpretty printという呼び方で決まり切っているから。
Googleで検索もしやすい。
0098デフォルトの名無しさん2013/10/27(日) 05:44:55.03
Prettyprint (or pretty-print) is the application of any of various stylistic formatting conventions to text, source code, markup, and other similar kinds of content.
0099デフォルトの名無しさん2013/10/27(日) 07:28:06.68
>>93
マジかお・・・Java 7の話?昔の話?
0100デフォルトの名無しさん2013/10/27(日) 07:35:39.01
javaをこれから始めるんですが
本に書いてあった.javaを.classにする作業で使うjavacというコマンドをコマンドプロンプトに入力すると
エラー:メイン・クラスcom.sun.tools.javac.mainが見つからなかったかロードできませんでした
とメッセージが表示されて.classが作れません、どうすればできるか教えてください

jdkはインストールされてます、pathも確認しました
0101デフォルトの名無しさん2013/10/27(日) 07:48:04.75
エスパーするとだな、JAVA_HOMEとしてJDKではなくJREをセットしているでしょ。
0102デフォルトの名無しさん2013/10/27(日) 07:55:43.71
>>100
tools.jarが見つからないのじゃないか。
jdkを再インストールすればいいよ。
0103デフォルトの名無しさん2013/10/27(日) 08:10:00.16
>>102
再インストールは2回しましたが解決できませんでした
0104デフォルトの名無しさん2013/10/27(日) 08:10:52.74
>>101
つまりどういうことですか?
Java_homeとはなんのことですか
0105デフォルトの名無しさん2013/10/27(日) 08:16:54.98
>>103
PATHになんと設定したのか教えて
0106デフォルトの名無しさん2013/10/27(日) 08:29:24.01
>>104
ごめん。環境変数JAVA_HOMEのこと。コマンドプロンプトから
set JAVA_HOME
set CLASSPATH
それぞれのコマンドを実行した結果をコピペしてみて。
(ユーザー名などが含まれる場合があるので要注意。その場合は名前の部分を書き換えて)
0107デフォルトの名無しさん2013/10/27(日) 08:45:17.51
馬鹿には無理
0108デフォルトの名無しさん2013/10/27(日) 12:59:49.40
>>105
jdkの中のbinというフォルダです
C:\Program Files\Java\jdk 1.7.0_45\bin\だった気がします
0109デフォルトの名無しさん2013/10/27(日) 13:15:47.45
Windowsのversion、32bit版か64bit版か、
jdkのversion、32bit版か64bit版か
0110デフォルトの名無しさん2013/10/27(日) 13:36:05.15
>>109
win64bit、jdkは1.7.0_45もちろん64bit版です
スペックが足りてないんでしょうか
javaを始めるのはこんなにも難しいものなんですね
0111デフォルトの名無しさん2013/10/27(日) 13:36:06.39
>>108
このパスだと、クォート必要だぞ
0112デフォルトの名無しさん2013/10/27(日) 13:50:33.24
JAVA_HOMEとCLASSPATHの設定値はどうなの・・・
0113デフォルトの名無しさん2013/10/27(日) 14:06:20.51
本に書いてないことがたくさん・・・
ここのほうかよっぽど頼りになります

java_homeはわかりません、設定してみます
0114デフォルトの名無しさん2013/10/27(日) 14:15:48.92
設定しなくて良いし勝手に小文字にしない > JAVA_HOME
繰り返すけどSET JAVA_HOMEとSET CLASSPATHの実行結果はどうなの?
0115デフォルトの名無しさん2013/10/27(日) 14:17:24.04
JAVA_HOMEはないならないでpathから推測してくれるのだが、
逆に変な値が設定されているとそうなるね。

set JAVA_HOME=
で解除できる
0116デフォルトの名無しさん2013/10/27(日) 20:53:55.61
正規表現で
マッチさせたい文字列が、対象文字列の中に複数存在する時、
指定した回数目に現れる部分をマッチさせる方法ってある?

例えば
s = "hoge foo hoge bar hoge piyo hoge qux";
この文字列の左から3つめのhogeから文末まで後方参照とかしたいのです

ループ文を使うほかない?
0117デフォルトの名無しさん2013/10/27(日) 21:43:27.19
>>100
tools.jarはjava1.7から廃止されたんじゃなかったけ?
>>116
方法はある
0118デフォルトの名無しさん2013/10/27(日) 21:51:43.21
>>116
方法の有無でいえばすぐ例は出せるだろうに
(?:hoge.*?){3}(hoge.*)
上手な正規表現で済ませたいって話なら正規表現のスレで相談しろという話になる
01191162013/10/27(日) 22:42:28.37
はい…ありがとうございます
0120デフォルトの名無しさん2013/10/27(日) 22:48:01.53
>>87
レスありがとうございました
0121デフォルトの名無しさん2013/10/28(月) 22:03:58.89
プログラミング経験なしでAndroidアプリを作ろうと思っているんですけど、何か良い書籍教えていただけませんか?
0122デフォルトの名無しさん2013/10/28(月) 22:17:26.93
>>121
本屋のjavaコーナー行って端から端まで買え
0123デフォルトの名無しさん2013/10/28(月) 22:17:41.00
サーブレッドを使ってプログラムを作っているのですが、設定ファイル(ORMの設定ファイル)はどこに置くのがベストですか?
/WEB-INF とかが無難なところでしょうか
0124デフォルトの名無しさん2013/10/28(月) 22:19:49.14
>>121
ttp://www.amazon.co.jp/dp/4822281655
0125デフォルトの名無しさん2013/10/29(火) 03:56:33.65
>>123 yes
0126デフォルトの名無しさん2013/10/29(火) 04:30:26.49
>>114
set JAVA_HOMEの実行結果は
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\bin;でした
set CLASSPATHは
環境変数 CLASSPATH が定義されていません でした

CLASSPATHを設定すれば使えるようになりますかね
0127デフォルトの名無しさん2013/10/29(火) 09:01:30.26
やってから言え
0128デフォルトの名無しさん2013/10/29(火) 09:32:18.65
JAVA_HOMEにbinは不要だと思う。
0129デフォルトの名無しさん2013/10/29(火) 13:25:18.41
java7のjavacならJAVA_HOMEは参照してないから問題ないはずだけどな。
もしかして古い版のjavaが入ってて、pathがそっち先になってないかな?
0130デフォルトの名無しさん2013/10/29(火) 16:44:36.62
となると

javac -version

でまずバージョン確認か。
0131デフォルトの名無しさん2013/10/29(火) 23:53:45.51
jdkのインストールは最大の難関だから
0132デフォルトの名無しさん2013/10/29(火) 23:55:44.69
そんなもんJavaプログラミング自体の面倒臭さに比べれば全く無視して差し支えないオーバーヘッド
0133デフォルトの名無しさん2013/10/30(水) 00:41:26.74
>>131
コンピュータ(というかシェル)について基本的なこと知っていれば朝飯前だろ。
普段から人任せで、どうやって動いているのか理解してないと、結局プログラムもサンプル以上のことできないから、先にコンピュータについて学んだほうがいいと思うぞ。
0134デフォルトの名無しさん2013/10/30(水) 00:43:53.74
馬鹿には無理
0135デフォルトの名無しさん2013/10/30(水) 01:05:33.06
jdkのインストールできる=javaできます!だろ
0136デフォルトの名無しさん2013/10/30(水) 01:07:32.64
馬鹿には無理
0137デフォルトの名無しさん2013/10/30(水) 01:16:10.28
WindowsならJDKのインストーラが細かいとこまでやってくれんじゃねえの?
0138デフォルトの名無しさん2013/10/30(水) 06:32:23.53
Eclipse落とすだけでいいじゃない
0139デフォルトの名無しさん2013/10/30(水) 07:30:02.19
環境変数くらいプログラミングやってたらどのみち使うだろ
0140デフォルトの名無しさん2013/10/30(水) 07:41:39.18
>>137
トラブルに対しては無力だから、そーっとそーっと崩さないように使い続けなければいけなくなる。
0141デフォルトの名無しさん2013/10/30(水) 12:47:29.08
>>122
入門書の棚買いはさすがに未だかつて無いのでは
0142デフォルトの名無しさん2013/10/30(水) 13:28:00.48
クラスパスだろうjk
0143デフォルトの名無しさん2013/10/30(水) 14:43:22.78
>>121
本を読むより先にエクセルなり使って
具体的なアプリの画面イメージとか動作イメージを作ってみる方が有意義
0144デフォルトの名無しさん2013/10/30(水) 15:49:10.57
ランタイムの話はjreポータブルはどうなん?
0145デフォルトの名無しさん2013/10/30(水) 20:00:21.81
>>142
PATHの仕組みを理解してれば、CLASSPATHの仕組みを理解するのも簡単じゃないかな。
0146デフォルトの名無しさん2013/10/30(水) 20:16:22.53
>>145
結構はまった記憶がある、どこにオブジェクトがあってどこで実行されるとか
0147デフォルトの名無しさん2013/10/30(水) 20:24:06.34
>>146
そりゃ実装でなくて概念で理解しないとハマるだろうけど。C言語使いに多い気がする。
0148デフォルトの名無しさん2013/10/30(水) 20:33:40.69
IDE使ってると頭つかわねーからな、コマンドラインにうつるととまどう
0149デフォルトの名無しさん2013/10/30(水) 21:46:23.58
javaはc#の生産性に勝てるかい?
.netばかりやっている上司を論破できるのか、俺にはそれが問題だ!!
0150デフォルトの名無しさん2013/10/30(水) 21:56:10.97
そうかよかったね
0151デフォルトの名無しさん2013/10/30(水) 22:37:28.70
>>149
ビジネスモデルや開発手法を無視してそう。
C#ってCI(継続的開発)ツールって使えるの?
0152デフォルトの名無しさん2013/10/30(水) 22:43:04.43
馬鹿にかまうなよ
0153デフォルトの名無しさん2013/10/31(木) 00:01:09.18
>>149
JavaかC#かは関係ない。
コレクションやオブジェクト関係のメソッドを知ってるか、知ってないかの差が大きい。
0154デフォルトの名無しさん2013/10/31(木) 00:26:08.92
意味不明
0155デフォルトの名無しさん2013/10/31(木) 00:58:31.27
>>154
ハッシュコードの概念とかequalsメソッドの意味
知らないとリストを回してGetしはじめる
0156デフォルトの名無しさん2013/10/31(木) 01:00:04.85
ダメなプロジェクトは
Equalsメソッドとハッシュコードの自動生成をやってない
0157デフォルトの名無しさん2013/10/31(木) 01:06:23.15
自動生成ってEclipseの?
0158デフォルトの名無しさん2013/10/31(木) 01:07:19.30
>>155
意味不明2
0159デフォルトの名無しさん2013/10/31(木) 01:09:35.53
>>157
フレームワークでも、Eclipseでもどっでも良いんじゃないの?
フレームワークならアノテーションつけといてAntやAPTでDTOの自動生成とか。
0160デフォルトの名無しさん2013/10/31(木) 01:18:00.11
自動生成しないとどうなるの?
0161デフォルトの名無しさん2013/10/31(木) 01:29:31.58
>>160
List、Mapの機能で本来の機能を果たさなくなる。
0162デフォルトの名無しさん2013/10/31(木) 02:05:01.97
そんなバカな
0163デフォルトの名無しさん2013/10/31(木) 02:06:31.66
Objectに実装されてるequals()とhashCode()で通常は十分っしょ
0164デフォルトの名無しさん2013/10/31(木) 02:07:26.98
同じ内部データを持つクラスを同一として扱いたいのならオーバーライドは必要だけど
0165デフォルトの名無しさん2013/10/31(木) 02:18:10.49
ObjectはIDベースだろ。フィールド毎に等値性が必要ならオーバーライド必須
0166デフォルトの名無しさん2013/10/31(木) 02:22:37.11
前提を後付けされても。
0167デフォルトの名無しさん2013/10/31(木) 02:38:49.36
いつからMapはhashCode()の呼び出しが必須になったんだよ。
0168デフォルトの名無しさん2013/10/31(木) 02:55:50.58
>>167
オブジェクトをキーにputすると、取り出せない。
0169デフォルトの名無しさん2013/10/31(木) 02:57:44.38
そろそろ豪快な空振り三振くるぞ。
0170デフォルトの名無しさん2013/10/31(木) 03:02:31.47
EnumMapサイコー。なぜC#に無いのか不思議。
0171デフォルトの名無しさん2013/10/31(木) 03:02:34.60
IDベースってなに?
0172デフォルトの名無しさん2013/10/31(木) 03:06:57.49
ジャバはオワコンなんだからもういいじゃないですかあ><
0173デフォルトの名無しさん2013/10/31(木) 03:11:38.95
>>168
インスタンス作り直してキーにする使い方するのにequalsやhashcodeをオーバーライドしない奴とかいたら根本理解が足りてないとしか言いようがないな
0174デフォルトの名無しさん2013/10/31(木) 03:18:02.38
君は勉強不足
0175デフォルトの名無しさん2013/10/31(木) 03:32:54.92
自前クラスをキーに使うなんてやったことないから知らんなあ
0176デフォルトの名無しさん2013/10/31(木) 03:42:33.98
そもそもequalsをオーバーライドしない理由がない。==で比較すれば同じ結果だからequalsをIDで比較する必要がない。
equalsをオーバーライドしたら、hash codeもオーバーライドする。
0177デフォルトの名無しさん2013/10/31(木) 03:46:48.71
equalsやhashcodeを必要とする使い方しないクラスも無駄にオーバーライドしてそう
0178デフォルトの名無しさん2013/10/31(木) 03:48:16.93
さっきからIDって何なんだよ、APIドキュメントにもIDについて書かれてないぞ
0179デフォルトの名無しさん2013/10/31(木) 03:50:10.31
保有する値が同じだろうと別のオブジェクトとして扱いたいとき内部値で比較するequalsやhashcodeをオーバーライドとかして余計なことをしそう
0180デフォルトの名無しさん2013/10/31(木) 03:50:46.61
昔ハッシュでツリー構造作ってたアホがいたなぁ。パフォーマンスは最悪。
0181デフォルトの名無しさん2013/10/31(木) 03:51:30.76
スライムAとスライムBのHPが同じ値になったらスライムが1匹減るという仕様
0182デフォルトの名無しさん2013/10/31(木) 03:59:23.91
>>161,168
MapやListはただのインターフェースなので
実装は作り手の自由であり、作り手が必ずしもhashCodeを使うと言うわけでは無い
■ このスレッドは過去ログ倉庫に格納されています