Java入門・初心者質問スレ Part.9

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/03/09(土) 23:59:15.92ID:ACok0wnJ
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.8
http://mevius.5ch.net/test/read.cgi/tech/1528370228/
2019/03/27(水) 06:22:28.73ID:VcZxW+M/
('仄')パイパイ
2019/04/09(火) 17:21:52.11ID:WcUdn8Y0
(1)
while (threadState == true) {}

(2)
while (threadState == true) {
System.out.print("");
}

マルチスレッドで、他のスレッドが threadState を変更するのを待ちたいのですが、(1)だとループを抜けてくれませんが、(2)なら抜けます。
何が悪いんでしょうか?
4デフォルトの名無しさん
垢版 |
2019/04/09(火) 17:29:01.76ID:xq+Mg1lA
>>3
その変数の宣言はどうなってる?
5デフォルトの名無しさん
垢版 |
2019/04/09(火) 17:38:46.23ID:WcUdn8Y0
>>4
boolean threadState;
クラス変数です。
この変数を変更する別スレッドも内部クラスです。
6デフォルトの名無しさん
垢版 |
2019/04/09(火) 18:13:44.59ID:xq+Mg1lA
>>5
volatile 付けるとどうなる?
7デフォルトの名無しさん
垢版 |
2019/04/09(火) 18:28:46.46ID:WcUdn8Y0
>>6
それでうまく行きました。ググったらコンパイラの最適化の問題とかみたいですね。
本当にありがとうございました。
8デフォルトの名無しさん
垢版 |
2019/04/09(火) 20:54:29.66ID:xq+Mg1lA
>>7
ああ。でもマルチスレッドでの同期については単純なのならそれでも良いけど本当ならちゃんとロックした方が良い事はお忘れなく。

少なくとも今のプログラムだと変数の内容が変わるまでずっとルーブするので効率が悪い。
他から起こされるまで眠るみたいな方式の方が本当に何もしない状態になるので効率は良い。
9デフォルトの名無しさん
垢版 |
2019/04/21(日) 19:40:38.40ID:rH04a7Av
スレチならすいません。
以前からスマホアプリを作ってみたいなとおもってまして、この度PCを購入しました
のでもってまずはプログラミングの代名詞でもあるjavaを習いたいと思いandroid studio をダウンロード、インストールしたのですが、
アプリが立ち上がりません。。

どなたかこの原因がわかる方いませんか?

↓エラーメッセージ
Error launching Studio
Failed to load JVM DLL C:\Program Files\Android\Android Studio\jre\jre\bin\server\jvm.dll

if you already have a 64-bit JDK installed, define a JAVA _HOME variable in Computer > System Properties > System Setting > Enviroment Variables.


↓PCのスペック
win 10
Corei7
RAM 8G
OS 64ビット
10デフォルトの名無しさん
垢版 |
2019/04/22(月) 01:40:27.90ID:x8/JvOWt
JVMのDLLの読み込みが失敗しました
64-bit JDKインストールされてるなら環境変数JAVA_HOMEを設定してください

ってことなのでJavaをインストールして環境変数を設定したらok
11デフォルトの名無しさん
垢版 |
2019/04/22(月) 01:56:13.24ID:8zvml5Ya
>>10
ご回答ありがとうございます。
私もそう思ってJDKをインストールして環境変数(JAVA_HOME)を通してみたのでしたが、同じエラーメッセージが表示されました。
パスが間違っているのかわからないんですが、JDKのインストール先とAndroid Studioのインストール先が違うと動かないのでしょうか?
JDKをどこかのファイルと同じ階層に置かないと起動しないというのはありますでしょうか?
12デフォルトの名無しさん
垢版 |
2019/04/22(月) 07:26:20.66ID:x8/JvOWt
>>11
パスが正しいかはコマンドプロンプトで実行してみればわかるかと
"%JAVA_HOME%\bin\java.exe" -version

所定の場所にJDKをインストールしないといけないなら
JAVA_HOMEを設定する必要ないんでそういうことはないと思うよ

64bitならstudio64.exeを起動しましょうとかあるんで
そのへんじゃないかな
13デフォルトの名無しさん
垢版 |
2019/04/22(月) 20:58:57.68ID:8zvml5Ya
>>12
解決しました。
studio64.exeでした
いやはやお恥ずかしい・・

ありがとうございます
14デフォルトの名無しさん
垢版 |
2019/04/23(火) 05:21:17.14ID:dZlKsmD/
昔今より更に素人だった頃自分のパソコンにjavaの実行環境を作った事があって、そしてまた走らせてみようと思ってさっきVScodeで実行してみたら上手く行った。
ここまではいいんだけど多分今入ってるのがSEだからEEに取り替えたい。
環境変数の変更からファイルの交換までどうすればいいか誰か教えてくれない?
一応VShomeのjava.homeっていう所は"C:\\Program Files\\Java\\jdk1.8.0_161"みたいなんだけど
15デフォルトの名無しさん
垢版 |
2019/04/23(火) 06:10:09.74ID:dZlKsmD/
とりあえずjava_ee_sdkっていうのはDL&解凍したけど今パスの方にあるjava_homeの参照先はjdkなんだよね
でも調べるとsdkにjdkが入ってるみたいなことが書いてあるからsdkと書いてあるフォルダをjava_homeに設定したら駄目だった
どこにjavaEEのjdkがあるの?
16デフォルトの名無しさん
垢版 |
2019/04/28(日) 12:34:42.35ID:hq3/I6v+
どなたか教えてください。。。
未経験で今新人研修してます。。。

【 課題 】Javaでタイピングゲーム作成
      https://dotup.org/uploda/dotup.org1832355.png
【 形態 】1. Javaアプリケーション(main()で開始)
【 GUI  】4. 制限なし
【 期限 】2019/05/05
【 Ver  】javac 1.8.0_131
2019/04/28(日) 12:48:45.95ID:FKjutIP9
>>16
どこまでやったのかも書き込んで下さい
18デフォルトの名無しさん
垢版 |
2019/04/28(日) 13:05:16.13ID:hq3/I6v+
>> 17
すみません
私未経験でメソッドとか配列とかチンプンカンプンなので、
コンパイルエラーなのですが、進捗はこちらです。。
1) https://dotup.org/uploda/dotup.org1833185.png
2) https://dotup.org/uploda/dotup.org1833187.png
3) https://dotup.org/uploda/dotup.org1833188.png
19デフォルトの名無しさん
垢版 |
2019/04/28(日) 14:07:36.96ID:Sci+vZGC
>>18
エラーの内容を教えてもらえれば
20デフォルトの名無しさん
垢版 |
2019/04/28(日) 14:17:03.90ID:hq3/I6v+
>>19
https://dotup.org/uploda/dotup.org1833229.png
このような感じです。。
2019/04/28(日) 14:17:11.36ID:FKjutIP9
>>18
未経験で新人研修と言う事なので
一気に全てやろうとするのではなく
1つ1つメッセージを表示して確認しながら追加していってみて下さい

1,最少構成でコンパイルが通るようにする
2,難易度選択で分岐
3,・・・のように
2019/04/28(日) 14:18:36.34ID:FKjutIP9
>>20
基本的にはエラーメッセージは上から順に解決していって下さい
23デフォルトの名無しさん
垢版 |
2019/04/28(日) 15:24:46.80ID:Sci+vZGC
>>20

↓こんな感じでしょ
public static void literal1(String easy) {
  String[] easy = ...

  for (int i = 0; i < easy.length; i++) {
    ...
}

引数でString easyを定義してて
String[] easyでも同じ名前の変数を使ってるんで
そのせいじゃないかな
変数の名前変えれば良さそう
24デフォルトの名無しさん
垢版 |
2019/04/28(日) 16:08:34.47ID:hq3/I6v+
21>>この問題の場合どこで条件分岐して良いのか、など構造の書き方がわかりません。。
アドバイス(特に書き方について)していただけると嬉しいです。。
22>>処理は全て上から、問題文の1文目から書いていけばいいですか?
25デフォルトの名無しさん
垢版 |
2019/04/28(日) 16:10:15.85ID:hq3/I6v+
23>>
クラスの宣言と配列の引数は名前変えないといけないんですか!?
2019/04/28(日) 16:33:18.29ID:FKjutIP9
>>24
上からというのはエラーメッセージの上から順番にです

1つ目のエラーが原因で2つ目のエラーが表示されるというケースもあるので
その場合は1つ目のエラーを解決すれば2つ目のエラーも解決します

エラーメッセージが指し示している部分より前に原因がある事もあります
27デフォルトの名無しさん
垢版 |
2019/04/28(日) 16:40:52.16ID:Sci+vZGC
>>25
同じスコープで同じ変数名を使うのがNGです
int a = 0;
int a = 1;
はコンパイルエラーになるっしょ

void test(int a) {
 int a = 0;
}
もコンパイルエラーになるっしょ

そういうこと
28デフォルトの名無しさん
垢版 |
2019/04/28(日) 18:27:38.29ID:ChpnCGHg
最近って環境変数JAVA_HOMEって設定しなくても良くなったんですか?
OracleJDKからの移行で色々OpenJDKの試しているのですが
各種ツールなども問題なく動くようにみえます
29デフォルトの名無しさん
垢版 |
2019/04/28(日) 19:06:23.53ID:Sci+vZGC
環境変数が設定されてなかったら固定のパス見たり
JREを内蔵してるソフトウェアもあったりするけど
ツールによるんじゃないかな
30デフォルトの名無しさん
垢版 |
2019/04/28(日) 20:07:51.67ID:Sci+vZGC
>>24
制御構造は順次、選択、反復で
どこの処理をループさせる必要があるか
どこで選択が必要かは全体のフローをざっくりと書いて見るとわかるかと
それを仕様から読み取るのも問題の範囲かなと、良い問題だわ
参考までに僕は↓こんな感じのフローかなと思った

ゲームのループ
{
  難易度選択(Easy, Normal, Hard)
  ・・・

  出題のループ
  {
    一致のループ
    {
      ・・・

      if 文字列が一致
      {
        ・・・
        ループを抜ける
      }

      ・・・
    }
  }

  ・・・
  リトライ確認がNoならループを抜ける
}
31デフォルトの名無しさん
垢版 |
2019/04/28(日) 20:33:58.00ID:hq3/I6v+
>>26
分かりました!
ありがとうございます。
32デフォルトの名無しさん
垢版 |
2019/04/28(日) 20:35:30.76ID:hq3/I6v+
>>27
なるほど。。そうゆうことだったんですね。
ありがとうございます
33デフォルトの名無しさん
垢版 |
2019/04/28(日) 20:36:44.50ID:hq3/I6v+
>>30
わ!ありがとうございます。
こうゆう感じで書いたらいいんですね。

ちなみに私の配列の書き方は合ってますか?
34デフォルトの名無しさん
垢版 |
2019/04/28(日) 20:47:23.73ID:Sci+vZGC
>>33
String[] easy = {"byte","int", ・・・};

って書き方でしょ、あってるよ
コンパイルも通るっしょ
35デフォルトの名無しさん
垢版 |
2019/04/28(日) 21:05:25.44ID:hq3/I6v+
>>34

あ。はい。通ります。。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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