Java入門・初心者質問スレ Part.9
■ このスレッドは過去ログ倉庫に格納されています
どなたか教えてください。。。
未経験で今新人研修してます。。。
【 課題 】Javaでタイピングゲーム作成
https://dotup.org/uploda/dotup.org1832355.png
【 形態 】1. Javaアプリケーション(main()で開始)
【 GUI 】4. 制限なし
【 期限 】2019/05/05
【 Ver 】javac 1.8.0_131 >>18
未経験で新人研修と言う事なので
一気に全てやろうとするのではなく
1つ1つメッセージを表示して確認しながら追加していってみて下さい
1,最少構成でコンパイルが通るようにする
2,難易度選択で分岐
3,・・・のように >>20
基本的にはエラーメッセージは上から順に解決していって下さい >>20
↓こんな感じでしょ
public static void literal1(String easy) {
String[] easy = ...
for (int i = 0; i < easy.length; i++) {
...
}
引数でString easyを定義してて
String[] easyでも同じ名前の変数を使ってるんで
そのせいじゃないかな
変数の名前変えれば良さそう 21>>この問題の場合どこで条件分岐して良いのか、など構造の書き方がわかりません。。
アドバイス(特に書き方について)していただけると嬉しいです。。
22>>処理は全て上から、問題文の1文目から書いていけばいいですか? 23>>
クラスの宣言と配列の引数は名前変えないといけないんですか!? >>24
上からというのはエラーメッセージの上から順番にです
1つ目のエラーが原因で2つ目のエラーが表示されるというケースもあるので
その場合は1つ目のエラーを解決すれば2つ目のエラーも解決します
エラーメッセージが指し示している部分より前に原因がある事もあります >>25
同じスコープで同じ変数名を使うのがNGです
int a = 0;
int a = 1;
はコンパイルエラーになるっしょ
void test(int a) {
int a = 0;
}
もコンパイルエラーになるっしょ
そういうこと 最近って環境変数JAVA_HOMEって設定しなくても良くなったんですか?
OracleJDKからの移行で色々OpenJDKの試しているのですが
各種ツールなども問題なく動くようにみえます 環境変数が設定されてなかったら固定のパス見たり
JREを内蔵してるソフトウェアもあったりするけど
ツールによるんじゃないかな >>24
制御構造は順次、選択、反復で
どこの処理をループさせる必要があるか
どこで選択が必要かは全体のフローをざっくりと書いて見るとわかるかと
それを仕様から読み取るのも問題の範囲かなと、良い問題だわ
参考までに僕は↓こんな感じのフローかなと思った
ゲームのループ
{
難易度選択(Easy, Normal, Hard)
・・・
出題のループ
{
一致のループ
{
・・・
if 文字列が一致
{
・・・
ループを抜ける
}
・・・
}
}
・・・
リトライ確認がNoならループを抜ける
} >>27
なるほど。。そうゆうことだったんですね。
ありがとうございます >>30
わ!ありがとうございます。
こうゆう感じで書いたらいいんですね。
ちなみに私の配列の書き方は合ってますか? >>33
String[] easy = {"byte","int", ・・・};
って書き方でしょ、あってるよ
コンパイルも通るっしょ >>36
俺んとこは西暦だけらしいからしてねぇみてぇだな。 今Javaを独学で勉強してる者です。
現在、有名な「すっきりわかるJava2版」を購入しオブジェクト指向で躓いています。
最近IT関連のネット記事をチラチラ見てて、アンドロイドアプリの開発言語がJavaからKotlinに移行しているという記事が目に止まったんですよね。。
そこで質問なんですが、今からアンドロイドアプリを作ろうとするならばKotlinを学習する方が良いのでしょうか?
現エンジニアの方の意見をお聞きしたいです プログラマになりたいならJava
Androidアプリだけ作れればいいならKotlin
初心者ならググれば何でも出て来るJavaの方が良いかも知れない >>40
やはり現状はjavaの方が情報量もあって良いんですね
プログラミングは趣味でやってみようかなと思ってます。〇の島のにゃんこみたく農業ゲームとか作ってみたいなと思ってますね。
自分の調べたところJavaが廃れることは当分なさそうですので引き続き頑張っていきます
ご返答ありがとうございました。 >>40
Kotlinはjaやnativeもあるから今後androidだけには収まらないと思うよ。
仕事で使うのでなくても覚えておいた方が良い言語になると思うが。 当時、Javaは自然に人気が出た感じがしたが、Kotlinは無理やり感がある。 無理矢理というか、Googleが採用してAndroidでのサポート始めたからそこで使う人が爆発的に増えたということだろうな。
Google採用がなければJava同様にじわじわと増えたのかも知れない。
あ、でも Java はインターネットと Java Applet で急に広まった感じするな。
当時まだ flash とか動くページ作れるやつがなかったか、あっても貧弱だったからだと思う。
JavScriptもたいしたこと出来なかったように思う。 >>45
>Google採用がなければJava同様にじわじわと増えたのかも知れない。
うーみ。 なんだかよくわかっていないのが多いけど、Javaはクラスライブラリが画期的だった。マイクロソフトはクラスライブラリのセンスがなくてWindowsアプリケーション作りの環境をなかなか提供できなかった。
サンマイクロシステムズがJavaで正解を持ってきてくれたため、マイクロソフトは.NET frameworkを作れた。
その間はVisual C++のMFCか、計画性がまったくないクソ拡張をしてしまったVBによってアプリケーションが作られ混乱した。 >>47
確かにあなたの言ってることが一番正しい気がする。
話は変わるけど、Kotlinは、Javaではなく、JavaScriptに似ていて、
Script言語の方が初心者には受け入れられやすいから一見、多数決では
人気に有利に働いている可能性がある。しかし、大きなアプリを作ろうと
した場合、Javaの方が実は便利なのではないかと思う。さらに、
もっと深く進んでいくと、JavaよりもC++の方が便利、となっていく。 public static void main(String[] args) {
List<String> arr = new ArrayList<>();
arr.add("青森県"); arr.add("岩手県"); arr.add("宮城県");
arr.add("秋田県"); arr.add("山形県"); arr.add("福島県");
Collections.sort(arr, new Comparator<String>() {
public int compare(String s1, String s2) {
if (s1.compareTo(s2) > 0)
return 1;
else if (s1.compareTo(s2) < 0)
return -1;
else
return 0;
}
}
);
System.out.println(arr);
}
[宮城県, 山形県, 岩手県, 福島県, 秋田県, 青森県]
なんですが、グーグルスプレッドシートで並び替えると
岩手県 宮城県 山形県 秋田県 青森県 福島県
になります。プログラム間違ってるでしょうか?それとも文字コードの違いかなんかですか? >>49
JavaはUnicode順で
グーグルスプレッドシートはShift_JIS順ですね
Shift_JISで並び替えるならこれで
Collator collator = Collator.getInstance(Locale.JAPAN);
Collections.sort(ar r, collator); >>50
そういうことができるんですね。勉強になりました。ありがとうございました。 スッキリわかるJava入門を購入して
javaを学ぼうと思うのですが
目標に基本情報技術者のjavaでの合格を目指そうと思っています。
調べたらみんな表計算らしいので
文系で初学者が無謀なんでしょうか? >>52
表計算が一番簡単だというのは昔の話で、いまは架空の表計算マクロの問題なので、これはこれで勉強が必要。
Javaの場合は標準ライブラリがコードに書かれているので、見慣れていないとわかりづらいが、問題そのものは簡単。 >>53 ありがとうございます。
正直、何か目標が無いと挫折しそうで・・・というか
前に1回挫折してるんですよね・・・ スッキリJava を読んで、たのしいRuby を読む。
それで、Ruby で、プログラミングのお題スレの問題を解く!
これがプログラミングを学ぶ、最速メソッドです! かなしいRubyの次にもう1つ本があった気がするけど何だった? var ●● = iimGetLastExtract(1);
switch (true)
{
case /△△/.test(●●):
iimPlay("☆☆☆");
break;
特定のページ内にあるワードの有無でcaseを分岐させたいんですけど、検索するページを●●で指定しているのかわかりませんが機能しません。
●●にはいる値とは、作者の把握固めの値でいいのか、そのページを識別する値でないと駄目なのか、後者だとしたらそれはどこから抽出すればいいのでしょうか?
本を買ったりネットで調べても、そこにいれるべきは、なんなのかが書いてないです。
初心者入門的なものにも書いてないので、初心者以前の質問かもですが、ご教授ください >>58
それはJavaScriptじゃないかな
JavaとJavaScriptは違う言語だよ
ググってみたけどiMacrosみたいだね
iimGetLastExtract(1);
はiMacrosの値を読み込むってものらしいから
前のところで何を読み込んでいるのかによるんじゃないかな
いずれにしろJavaScriptのスレとかの方が回答付きやすいんじゃないかな >>59
そうです。imacros自体の本は出てないようで
javaの本とJavaScriptの本の中身をみた結果、コードの羅列的にjavaの応用なのかなと参考本買ったのですけど
JavaScriptでしたか・・・。改めて本屋覗いてみます。
回答有難う御座いました。 「imacros iimgetlastextract」「javascript test 正規表現」で検索!
web 制作管理板の、JavaScript のスレで聞いてください! >>61
有難う御座います。検索のほうしてみます。
かつJavaScriptの本買って駄目そうなら、そちらで質問させてもらいますm(__)m Java で FullGC が頻発している場合、CPU負荷が高くなるけど、
vmstat でいう sy(システム時間)が高くなる傾向になるの?
それとも us(ユーザー時間)が高くなる傾向になるの? 超絶初心者なのですが、どなたかご教授願います。
public static void main(String[] args) {
int num=Input.getInt("整数を入れてください");
System.out.println(num+ "を三乗すると" +modori(num)+ "です。");
}
public static int modori(int num) {
int c=num*num*num;
return c;
}
}
modoriメソッドでなぜcをreturnさせないと動かないのでしょうか? >>65
そのメソッドはintを返すように書いてあるからretutnでint型の値を返さなければコンパイル時にエラーになる。 >>66
なるほど!つまりint c=num*num*num; を modori(int num) {
に代入(?)してるっていう解釈で間違ってないですか? returnを書かない場合、cはmodoriの外に出られず呼び出し側に行かないから Java限定の話じゃないんですが・・・
ORマッピングする場合の、エンティティクラスは、テーブルに対応したものを作るべきですか?
アプリのUIの入力項目に、複数のテーブルから作ったビューをマッピングすることになる場合、
ビューに対応するエンティティクラスを作ればいいかと思ってるんですが・・・ エンティティは、テーブル構成と同じだろ
そう言えば、O/R マッパーで、複数の表を結合した、ビューは聞かない 普通にありえるだろ。
Hibernateなら、@Immutableってつけるだけだ。
まんまリードオンリーってことだ。 下記のコードを実行すると、10進数で10と表示されます。
これを2進数で00001010などと表示させたいのですが、
何か方法はありますでしょうか?
知っている方がいたらよろしくお願いします。
https://pastebin.com/bWeDy4fC java初心者です。現在オブジェクト指向で躓いています。とにかく読みまくって調べまくっ
てオブジェクト指向がどういう物なのか、どういう考え方なのかは理解できました。しかし
、「オブジェクト指向を使っプログラムをかけ」と言われてもまずどこから手を付ければい
いのかさっぱりです。ソースの例なんかを見ても何が起こっているのかわかりません。
”数字を入力させ、その数が10以上なら++するの繰り返し。10以下なら終了”
こう言われたならまず数字を入力させるんだな、scannerだな。繰り返しって事はforだな。
って分かるわけです。じゃあオブジェクト指向は...?なに?どこから手を付けるの?何が
どうなってるの?って感じです。どなたかご教授願えませんでしょうか... >>75
保持できる数値の下限が10の、Limit10Integerクラスを作ってみて、
そのクラス同士の演算、通常のIntergerやプリミティブなintとの演算を
考えてみては? 別のクラスを作ってインスタンス生成してそれを使えばとりあえずオブジェクト志向 プロパティとメソッドをまとめたものが簡単に作れるのがオブジェクト指向
クラスはあってもなくても Javaのプロパティって
C++で言う所のクラスに内包された#defineみたいなもん? >>74
Integer.toBinaryString ふつうに2進数に変換した後に
"0000000" + 2進数 をsubstringで右から必要な桁数とれば? そうか?足りない分だけ '0' 入れれば良いだけだが。 >>83
そうそう。それでもいい。(なんとなく無駄な感じはするが) 74です。
皆さんレスありがとうございます。
もう1つお聞きしたいのですが、コード内の変数binaryNumは2進数にして宣言して
いるのに、println()メソッドを使うと10進数表示になってしまうのは仕様でしょうか? 数値リテラルを2,8,10,16進数のどれで設定してもintはただの符号付き32bitの数値なのよ こんにちは。
Microsoft Java VM の仮想マシンを使っている者なんですが、
現在craving explorerを使っています。
そこで、craving explorerで
ツール→インターネットオプション→セキュリティタブ
信頼済みサイト→レベルのカスタマイズ→Microsoft VM →
Javaの許可→カスタム を押した後、
下にある「Javaカスタム設定」を押して未署名のコンテンツの実行を許可しようとしたところ
「Javaカスタム設定」を押した後に「craving explorerは動作を停止しました」と出てしまいます。
解決策を教えて下さい。
craving explorerでJavaカスタム設定を押して権限の編集及び未署名のコンテンツの実行に許可をしたいです。 >>90
それCravingExplorerからただ標準のインターネットオプションを呼び出してるだけだから
コントロールパネルとかから呼んで変更してからCravingExplorer起動してみるとか クラス型変数ってクラス定義さえしていれば、1個もインスタンスしてなくても使えるんだっけ? streamに対する操作として、max(Comparator::natualOrder)みたいにメソッド参照で操作できますか。どの参考書にもComparator.natualOrder()を使ってるのですが よく知らんが
そのCoparator class中のnaturalOrderがどう定義されてるかによるんじゃね
lambda memberとして定義さてりゃClassName.mamberNameだしfunction memberとして定義さてりゃClassName::memberNameなんじゃね
まぁ比べるやつ!なんて名前に冠してるクラスだし普通ラムダってるとは思うが
max funcのpredicate argとしてlambdaぶっこもうとしてるってことっしょ?(´・ω・`) こんばんわ。
わかる方がいらっしゃれば、教えていただけないでしょうか。
当方、DBをACCESSとしてjavaを学んでいます。
その中で、以下のSQL文をjavaで実行しようとしました。
UPDATE SAMPLETABLE SET 工数 = ROUND(DAVG("予定工数","SAMPLETABLE","[プロジェクトcd]='" & [プロジェクトcd] & "' AND [ID]='" & [ID] & "'"),1)";
上記は、SAMPLETABLEテーブルの中の予定工数列の平均値(小数点第2位を四捨五入)を工数列に更新する内容で、ACCESS上では正常に動作することを確認済みです。
これをjavaで実行しようとしたときに、
sql = "UPDATE SAMPLETABLE SET 工数 = ROUND(DAVG(\"予定工数\",\"SAMPLETABLE\",\"[プロジェクトcd]='\" & [プロジェクトcd] & \"' AND [ID]='\" & [ID] & \"'\"),1)";
statement.executeUpdate(sql);
としたところエラーとなりました。
statement.executeUpdate(sql);
で何が実行されているか確認したところ、実行されているSQLは以下の通りでした。
UPDATE SAMPLETABLE SET 工数 = ROUND(DAVG([予定工数],[SAMPLETABLE],[[プロジェクトcd]='] & [プロジェクトcd] & [' AND [ID]='] & [ID] & [']),1)
どうも\"の組み合わせが大カッコとして認識されているらしく、ACCESSで正常に動作しないようでした。
SQL文内で"を使わなくてはならず、そうするとエスケープ文字の\が必要とある為、解決方法が見当たりません。
解決方法がわかる方がいらっしゃれば、ご教授いただけないでしょうか。 >>96
どういうドライバ経由で繋いでいる?
DAvgというAccess限定の特殊関数動くんかな
Criteria引数をその時の列の値で動的に生成してるんだろうけど
そんなの標準SQLにないからなあ
素直に
・プロジェクトCD毎の予定工数テーブルを作成
・上記と結合(またはサブクエリ)して更新
の2ステップにした方がいいと思う
(もしくはDAVG部分をサブクエリに書き換え)
ちなみにDBをACCESSとしてjavaを学ぶというのは特殊すぎて
ハマるポイントが多すぎると思われるのでお勧めしない
まだSQLiteの方がまし Accessに使うSQL文は当然、SQL Serverと同様、マイクロソフト製品固有のSQL文になる
そのSQL文が正しく実行されるかはAccess内部でクエリーでも組んで実行しないと確証取れないよ >>97,98
レスありがとうございました。
ドライバはjdbc:odbcのことでよいでしょうか。
やはりACCESSは特殊なのですね。。。 >>99
JDCB以外で接続する方法は知らないな
と言うか実装上はJDCB活用する様にするのが普通 QueryRunner qr = new QueryRunner();
String sql = "SELECT A,B,C FROM HYO";
List<Map<String, Object>> MAP = qr.query(con, sql, new MapListHandler());
DBUtilsというライブラリを使用して上のようなコーディングをしましたが、
List<Map〜の箇所で後続の処理に行かずfinallyに抜けてしまいます。
おそらく何かしらのエラーが発生している為だと思うのですが、
} catch (SQLException exception) {
でも補足できませんでした。
例外処理もなかなか理解できておらず申し訳ないのですが、何が原因であるか
教えていただけないでしょうか。
情報が不足していたら申し訳ありません。 >>101
ただの Exception で catch してスタックトレースでも出してみれば良いのでは? さっきJavaの更新したんだが、システムトレイからアイコンが消えなくなった
コンパネ開いてアイコンのチェックを外して適用、OKしても消えない、どうすりゃいいんだ 以下ソースコードについてです。
要件としてはキーボード入力したデータの判定チェックをしたいです。
1.0点〜100点以外の入力はエラー ← ok
2.数字以外の場合はエラー ← ok
3.空白の場合はエラー ← これが以下ソースでは実装できず困ってます・・
try{
Integer inParam2 = Integer.valueOf(bufReader.readLine());
//0点以下、100点以上はエラーMSGを返す
if(inParam2 < 0 || inParam2 > 100 ){
System.out.println("0点〜100点の間で入力してください");
System.exit(1);
}else if (inParam2 == null){
System.out.println("点数は必須項目です。");
System.exit(1);
}else{
recordMap.put("国語",inParam2);
}
//数字以外をチェック
} catch (NumberFormatException e) {
System.out.println("数字を入れてください");
System.exit(1); >>106
bufReader.readLine()のnullチェックを行えばいいよ
↓こんな感じ
String line = bufReader.readLine();
if (line == null) {
// error
}
try{
Integer inParam2 = Integer.valueOf(line);
・・・ null判定ブロック内のコードがデッドコードだって警告が出るんだけど、なんで? >>110
ああ、ごめんなさい。>>106さんのコードのことです。 >>109
if(inParam2 < 0 || inParam2 > 100 ){
この条件はinParam2がnullでないことを前提としていて
inParam2がnullだったら例外が投げられるっしょ
}else if (inParam2 == null){
なのでこの条件にはたどり着かないんよ
if (inParam2 == null) {
} else if (inParam2 < 0 || inParam2 > 100 ) {
}
にすれば警告はでなくなるけど
Integer.valueOf(bufReader.readLine());
はnullを返すことはないんでinParam2 == nullは常にfalseになる
Integer.valueOfにnullを渡すとNumberFormatExceptionが投げられる
空白の場合は"点数は必須項目です。"と出力したいけれども
"数字を入れてください"と出力されてしまうのじゃないかな >>112
なるほどそういうことですか。分かりました。ありがとうございました。 https://pastebin.com/dEtCHVpv
MouseMotionListenerのgetMousePositionで、なぜnullがかえるのでしょうか? ■ このスレッドは過去ログ倉庫に格納されています