質問編集履歴

6

誤訂

2017/09/28 10:23

投稿

vetom
vetom

スコア8

test CHANGED
File without changes
test CHANGED
@@ -692,8 +692,6 @@
692
692
 
693
693
  flow.getChildren().add(bt1);
694
694
 
695
- flow.getChildren().add(bt2);
696
-
697
695
  pane.setCenter(flow);
698
696
 
699
697
  Scene scene = new Scene(pane, 320, 120);

5

疑問と試したことの追記

2017/09/28 10:22

投稿

vetom
vetom

スコア8

test CHANGED
File without changes
test CHANGED
@@ -286,6 +286,10 @@
286
286
 
287
287
 
288
288
 
289
+
290
+
291
+
292
+
289
293
  ###発生している問題・エラーメッセージ
290
294
 
291
295
 
@@ -294,6 +298,204 @@
294
298
 
295
299
 
296
300
 
301
+
302
+
303
+ 追記
304
+
305
+
306
+
307
+ 疑問
308
+
309
+
310
+
311
+ ```Java
312
+
313
+ public class Main extends Application {
314
+
315
+ Label label;
316
+
317
+ RadioButton[] symptomButtons;
318
+
319
+
320
+
321
+ @Override
322
+
323
+ void start(Stage stage) {
324
+
325
+ ...
326
+
327
+ RadioButton btn1 = new RadioButton("下痢");
328
+
329
+ RadioButton btn2 = new RadioButton("嘔吐");
330
+
331
+
332
+
333
+ symptomButtons = new RadioButton[] { btn1, btn2, ... };
334
+
335
+
336
+
337
+ ```
338
+
339
+
340
+
341
+ symptomButtons = new RadioButton[] { btn1, btn2, ... };
342
+
343
+ ラジオボタンのイベントをsymptomButtonsにまとめているのか?
344
+
345
+
346
+
347
+
348
+
349
+ ```java
350
+
351
+ BooleanProperty[] selectedProperties = Arrays.stream(symptomButtons)
352
+
353
+ .map(b -> b.selectedProperty())
354
+
355
+ .toArray(size -> new BooleanProperty[size]);
356
+
357
+ ```
358
+
359
+
360
+
361
+ 左辺
362
+
363
+ 配列BooleanProperty[]  変数名selectedPropertiesという変数に各ラジオボタンのチェック状態を格納している?
364
+
365
+ ただ型がBooleanで配列になるのかが分かりません。 配列はintとかStringとかが入ると思っていました。
366
+
367
+
368
+
369
+ 右辺
370
+
371
+ 配列symptomButtonsのstreamを取得して、マップ関数でsymptomButtonsの中でチェックされたボタンの情報のみ取得している。
372
+
373
+ それを配列BooleanProperty[]に再変換(再配列)している。
374
+
375
+
376
+
377
+
378
+
379
+ // 各症状のいずれかのボタンの選択状態が変化したときに病名を再計算してlabelへ反映させる
380
+
381
+ ```Java
382
+
383
+ label.textProperty().bind(
384
+
385
+ Bindings.createStringBinding(
386
+
387
+ () -> diagnose(makeSelectedSymptomSet()),
388
+
389
+ selectedProperties));
390
+
391
+ ```
392
+
393
+ ...
394
+
395
+
396
+
397
+
398
+
399
+ labelとBindings.createStringBinding(() -> diagnose(makeSelectedSymptomSet())とselectedPropertiesをbindしている
400
+
401
+ Bindings.createStringBinding(() -> diagnose(makeSelectedSymptomSet())は調べたけど全然わかりませんでした。
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+ ```Java
414
+
415
+ flow.getChildren().addAll(symptomButtons);
416
+
417
+ ...
418
+
419
+ stage.show();
420
+
421
+ }
422
+
423
+ ```
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+ // 選択状態の症状のみの集合を生成する
432
+
433
+ ```Java
434
+
435
+ Set<String> makeSelectedSymptomSet() {
436
+
437
+ return Arrays.stream(symptomButtons)
438
+
439
+ .filter(b -> b.isSelected())
440
+
441
+ .collect(Collectors.toSet());
442
+
443
+ }
444
+
445
+
446
+
447
+ ```
448
+
449
+
450
+
451
+
452
+
453
+ コレクションフレームワークの Setで知っていた文法は
454
+
455
+    Set<型> 変数名 = new Set()のような形で変数名.add()で要素を入れていく
456
+
457
+ というものなんですが
458
+
459
+  上記のような
460
+
461
+  Set<型> 変数名 {配列を集めるための処理}?みたいな文法は見たことありませんでした。この解釈で合っている分かりませんが
462
+
463
+ Set<型> 変数名 {配列を集めるための処理}だとすると
464
+
465
+   配列symptomButtonsをstreamを取得して、マップ関数でsymptomButtonsの中でチェックされたボタンの情報のみ取得している。
466
+
467
+  その結果をSetで取得してString diagnose(Set<String> symptomSet)に返している。
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+ ```Java
478
+
479
+ // 選択された症状の集合を受け取り、該当する複数の病名を連結した文字列を返す
480
+
481
+ String diagnose(Set<String> symptomSet) {
482
+
483
+ // 実装については質問者さんご自身で進めておられるようなので省略
484
+
485
+ String diagnosis = ...;
486
+
487
+ return diagnosis;
488
+
489
+ }
490
+
491
+ }
492
+
493
+ ```
494
+
495
+
496
+
497
+
498
+
297
499
  ###該当のソースコード
298
500
 
299
501
 
@@ -304,51 +506,65 @@
304
506
 
305
507
  ###試したこと
306
508
 
509
+
510
+
511
+ 追記
512
+
513
+
514
+
515
+ ほかの方法のアプローチもないかと作ってみましたがうまくいきません
516
+
307
- ```java
517
+ ```Java
518
+
519
+
520
+
308
-
521
+ import java.util.HashSet;
522
+
523
+ import java.util.Set;
524
+
525
+
526
+
309
- package application;
527
+ import javafx.application.Application;
528
+
529
+ import javafx.scene.Scene;
530
+
531
+ import javafx.scene.control.Button;
532
+
533
+ import javafx.scene.control.Label;
534
+
535
+ import javafx.scene.control.RadioButton;
536
+
537
+ import javafx.scene.layout.BorderPane;
538
+
539
+ import javafx.scene.layout.FlowPane;
540
+
541
+ import javafx.stage.Stage;
310
542
 
311
543
 
312
544
 
313
- import javafx.application.Application;
545
+ public class testd extends Application {
314
-
315
- import javafx.scene.Scene;
546
+
316
-
317
- import javafx.scene.control.Label;
547
+ Label label;
318
-
319
- import javafx.scene.control.RadioButton;
548
+
320
-
321
- import javafx.scene.layout.BorderPane;
322
-
323
- import javafx.scene.layout.FlowPane;
324
-
325
- import javafx.stage.Stage;
549
+ RadioButton[] symptomButtons;
550
+
551
+
552
+
553
+ public static void main(String[] args) {
554
+
555
+ launch(args);
556
+
557
+ }
326
558
 
327
559
 
328
560
 
329
- public class Main extends Application {
330
-
331
- Label label;
332
-
333
-
334
-
335
-
336
-
337
- public static void main(String[] args) {
338
-
339
- launch(args);
340
-
341
- }
342
-
343
-
344
-
345
561
  @Override
346
562
 
347
563
  public void start(Stage stage) throws Exception {
348
564
 
349
- label = new Label("診断");
565
+ label = new Label();
350
-
351
-
566
+
567
+
352
568
 
353
569
  RadioButton btn1 = new RadioButton("下痢");
354
570
 
@@ -356,37 +572,135 @@
356
572
 
357
573
  RadioButton btn3 = new RadioButton("宿便");
358
574
 
359
-
360
-
361
- if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd");}
362
-
363
- if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ckd");}
364
-
365
-
366
-
367
- BorderPane pane = new BorderPane();
368
-
369
- pane.setTop(label);
370
-
371
- FlowPane flow = new FlowPane();
372
-
373
- flow.getChildren().add(btn1);
374
-
375
- flow.getChildren().add(btn2);
376
-
377
- flow.getChildren().add(btn3);
378
-
379
- pane.setCenter(flow);
380
-
381
- Scene scene = new Scene(pane, 320, 120);
382
-
383
- stage.setScene(scene);
384
-
385
- stage.show();
386
-
387
- }
388
-
389
-
575
+ RadioButton btn4 = new RadioButton("脱水");
576
+
577
+
578
+
579
+ Button bt1 = new Button("cal");
580
+
581
+ Button bt2 = new Button("dignosis");
582
+
583
+
584
+
585
+
586
+
587
+ Set<String> dignosis = new HashSet<String>();
588
+
589
+
590
+
591
+ Set<String> diarrhea = new HashSet<String>();
592
+
593
+ diarrhea.add("ibd");
594
+
595
+
596
+
597
+ Set<String> vomit = new HashSet<String>();
598
+
599
+ vomit.add("ckd");
600
+
601
+ vomit.add("ibd");
602
+
603
+
604
+
605
+ Set<String> constipation = new HashSet<String>();
606
+
607
+ constipation.add("akd");
608
+
609
+
610
+
611
+ Set<String> dehydration = new HashSet<String>();
612
+
613
+ dehydration.add("akd");
614
+
615
+ dehydration.add("ibd");
616
+
617
+
618
+
619
+ btn1.setOnAction(event ->dignosis.addAll(diarrhea));
620
+
621
+
622
+
623
+ btn2.setOnAction(event ->dignosis.addAll(vomit));
624
+
625
+
626
+
627
+ btn3.setOnAction(event ->dignosis.addAll(constipation));
628
+
629
+
630
+
631
+ btn4.setOnAction(event ->dignosis.addAll(dehydration));
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+ bt1.setOnAction(event -> {for(String s: dignosis) {label.setText(s);}});
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+ /*
652
+
653
+ この方法だとSystem.out.println(s)でイメージ通りの出力ができるのですが、label.setText(s)だと
654
+
655
+       一疾患しかピックアップしてくれませんでした。おそらくラベルの宣言が配列として行われていないから
656
+
657
+       適当な一疾患だけピックアップされているのかなと思いましたが、配列として宣言した場合、配列数を先に
658
+
659
+       決めとかなければならないと書いてあったため、追加されていくこのdignosisには当てはまらないなと思いました。
660
+
661
+       こういうときにラベルをSet<String>のように宣言出来たらいいなと思ったんですが、調べたけど分かりませんでした。
662
+
663
+       */
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+   BorderPane pane = new BorderPane();
680
+
681
+   pane.setTop(label);
682
+
683
+ FlowPane flow = new FlowPane();
684
+
685
+ flow.getChildren().add(btn1);
686
+
687
+ flow.getChildren().add(btn2);
688
+
689
+ flow.getChildren().add(btn3);
690
+
691
+ flow.getChildren().add(btn4);
692
+
693
+ flow.getChildren().add(bt1);
694
+
695
+ flow.getChildren().add(bt2);
696
+
697
+ pane.setCenter(flow);
698
+
699
+ Scene scene = new Scene(pane, 320, 120);
700
+
701
+ stage.setScene(scene);
702
+
703
+ stage.show();
390
704
 
391
705
  }
392
706
 
@@ -394,14 +708,6 @@
394
708
 
395
709
 
396
710
 
397
- ラジオボタンで選択された状況を取得するisSelected()メソッドを使ってbtn1とbtn2が選ばれていればラベルをibdに変える、
398
-
399
- btn2とbtn3が選ばれていればラベルをckdに変える、みたいなイメージで作ったんですがうまくいきませんでした
400
-
401
-
402
-
403
-
404
-
405
711
 
406
712
 
407
713
  ###補足情報(言語/FW/ツール等のバージョンなど)

4

プログラムコード```で囲いました

2017/09/28 10:21

投稿

vetom
vetom

スコア8

test CHANGED
File without changes
test CHANGED
@@ -94,7 +94,9 @@
94
94
 
95
95
 
96
96
 
97
+ ```java
98
+
97
- Set<String> diarrhea = new HashSet<String>();
99
+ Set<String> diarrhea = new HashSet<String>();
98
100
 
99
101
  diarrhea.add("ibd");
100
102
 
@@ -128,13 +130,17 @@
128
130
 
129
131
  for(String s: intersection) {System.out.println(s);}
130
132
 
133
+ ```
134
+
131
135
 
132
136
 
133
137
  //ただ今回のピックアップのイメージは和集合なので、diarrheaとvomitの和集合ibdとckdをピックアップしました。
134
138
 
135
139
 
136
140
 
141
+ ```java
142
+
137
- Set<String> union = new HashSet<String>(diarrhea);
143
+ Set<String> union = new HashSet<String>(diarrhea);
138
144
 
139
145
  union.addAll(vomit);
140
146
 
@@ -146,6 +152,8 @@
146
152
 
147
153
 
148
154
 
155
+ ```
156
+
149
157
 
150
158
 
151
159
  /*ただこれをGUIに組み込もうとしたときに手詰まりになってしまいます。
@@ -160,218 +168,230 @@
160
168
 
161
169
 
162
170
 
171
+ ```java
172
+
173
+ RadioButton btn1 = new RadioButton("下痢");
174
+
175
+ RadioButton btn2 = new RadioButton("嘔吐");
176
+
177
+ RadioButton btn3 = new RadioButton("宿便");
178
+
179
+ RadioButton btn4 = new RadioButton("脱水");
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ if(btn1.isSelected()) {label.setText("akd,ckd"); }
188
+
189
+
190
+
191
+ if(btn2.isSelected()) {label.setText("ibd,ckd"); }
192
+
193
+
194
+
195
+ if(btn3.isSelected()) {label.setText("ibd"); }
196
+
197
+
198
+
199
+ if(btn4.isSelected()) {label.setText("akd"); }
200
+
201
+
202
+
203
+ if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd,ckd,akd"); }
204
+
205
+
206
+
207
+ if(btn1.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd,akd"); }
208
+
209
+
210
+
211
+ if(btn1.isSelected()&&btn4.isSelected()) {label.setText("ckd,akd"); }
212
+
213
+
214
+
215
+ if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd"); }
216
+
217
+
218
+
219
+ if(btn2.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
220
+
221
+
222
+
223
+ if(btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,akd"); }
224
+
225
+
226
+
227
+
228
+
229
+ if(btn1.isSelected()&&btn2.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd,akd"); }
230
+
231
+
232
+
233
+
234
+
235
+ if(btn1.isSelected()&&btn2.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
236
+
237
+
238
+
239
+
240
+
241
+ if(btn1.isSelected()&&btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
242
+
243
+
244
+
245
+
246
+
247
+ if(btn2.isSelected()&&btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
248
+
249
+
250
+
251
+
252
+
253
+ if(btn1.isSelected()&&btn2.isSelected()&&bt34.isSelected()&&btn4.isSelected())                        {label.setText("ibd,ckd,akd"); }
254
+
255
+
256
+
257
+
258
+
259
+ ```
260
+
261
+
262
+
263
+ ただこの方法だと最初のラベル表示から変更されません。そもそも和集合のコードを組み込めてませんし、冗長です。
264
+
265
+     
266
+
267
+
268
+
269
+ ```java
270
+
271
+ RadioButton btn1 = new RadioButton("下痢");
272
+
273
+ btn1.setOnAction( (ActionEvent)-> {label.setText("ckd")});
274
+
275
+
276
+
277
+ ```
278
+
279
+
280
+
281
+ のようなコードだとラベルを変更できるのですが、複数選択の和集合を想定しているので一つのボタンにたいして
282
+
283
+ 一つの答えみたいになるのはイメージとは異なります。
284
+
285
+
286
+
287
+
288
+
289
+ ###発生している問題・エラーメッセージ
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+ ###該当のソースコード
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+ ###試したこと
306
+
307
+ ```java
308
+
309
+ package application;
310
+
311
+
312
+
313
+ import javafx.application.Application;
314
+
315
+ import javafx.scene.Scene;
316
+
317
+ import javafx.scene.control.Label;
318
+
319
+ import javafx.scene.control.RadioButton;
320
+
321
+ import javafx.scene.layout.BorderPane;
322
+
323
+ import javafx.scene.layout.FlowPane;
324
+
325
+ import javafx.stage.Stage;
326
+
327
+
328
+
329
+ public class Main extends Application {
330
+
331
+ Label label;
332
+
333
+
334
+
335
+
336
+
337
+ public static void main(String[] args) {
338
+
339
+ launch(args);
340
+
341
+ }
342
+
343
+
344
+
345
+ @Override
346
+
347
+ public void start(Stage stage) throws Exception {
348
+
349
+ label = new Label("診断");
350
+
351
+
352
+
163
353
  RadioButton btn1 = new RadioButton("下痢");
164
354
 
165
355
  RadioButton btn2 = new RadioButton("嘔吐");
166
356
 
167
357
  RadioButton btn3 = new RadioButton("宿便");
168
358
 
169
- RadioButton btn4 = new RadioButton("脱水");
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
- if(btn1.isSelected()) {label.setText("akd,ckd"); }
178
-
179
-
180
-
181
- if(btn2.isSelected()) {label.setText("ibd,ckd"); }
182
-
183
-
184
-
185
- if(btn3.isSelected()) {label.setText("ibd"); }
186
-
187
-
188
-
189
- if(btn4.isSelected()) {label.setText("akd"); }
190
-
191
-
192
-
193
- if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd,ckd,akd"); }
194
-
195
-
196
-
197
- if(btn1.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd,akd"); }
198
-
199
-
200
-
201
- if(btn1.isSelected()&&btn4.isSelected()) {label.setText("ckd,akd"); }
202
-
203
-
204
-
205
- if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd"); }
206
-
207
-
208
-
209
- if(btn2.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
210
-
211
-
212
-
213
- if(btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,akd"); }
214
-
215
-
216
-
217
-
218
-
219
- if(btn1.isSelected()&&btn2.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd,akd"); }
220
-
221
-
222
-
223
-
224
-
225
- if(btn1.isSelected()&&btn2.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
226
-
227
-
228
-
229
-
230
-
231
- if(btn1.isSelected()&&btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
232
-
233
-
234
-
235
-
236
-
237
- if(btn2.isSelected()&&btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
238
-
239
-
240
-
241
-
242
-
243
- if(btn1.isSelected()&&btn2.isSelected()&&bt34.isSelected()&&btn4.isSelected())                        {label.setText("ibd,ckd,akd"); }
244
-
245
-
246
-
247
-
248
-
249
-
250
-
251
- ただこの方法だと最初のラベル表示から変更されません。そもそも和集合のコードを組み込めてませんし、冗長です。
252
-
253
-     
254
-
255
-
256
-
257
- RadioButton btn1 = new RadioButton("下痢");
258
-
259
- btn1.setOnAction( (ActionEvent)-> {label.setText("ckd")});
260
-
261
-
262
-
263
-
264
-
265
- のようなコードだとラベルを変更できるのですが、複数選択の和集合を想定しているので一つのボタンにたいして
266
-
267
- 一つの答えみたいになるのはイメージとは異なります。
268
-
269
-
270
-
271
-
272
-
273
- ###発生している問題・エラーメッセージ
274
-
275
-
276
-
277
-
278
-
279
-
280
-
281
- ###該当のソースコード
282
-
283
-
284
-
285
-
286
-
287
-
288
-
289
- ###試したこと
290
-
291
- package application;
359
+
360
+
361
+ if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd");}
362
+
363
+ if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ckd");}
364
+
365
+
366
+
367
+ BorderPane pane = new BorderPane();
368
+
369
+ pane.setTop(label);
370
+
371
+ FlowPane flow = new FlowPane();
372
+
373
+ flow.getChildren().add(btn1);
374
+
375
+ flow.getChildren().add(btn2);
376
+
377
+ flow.getChildren().add(btn3);
378
+
379
+ pane.setCenter(flow);
380
+
381
+ Scene scene = new Scene(pane, 320, 120);
382
+
383
+ stage.setScene(scene);
384
+
385
+ stage.show();
386
+
387
+ }
292
388
 
293
389
 
294
390
 
295
- import javafx.application.Application;
296
-
297
- import javafx.scene.Scene;
298
-
299
- import javafx.scene.control.Label;
300
-
301
- import javafx.scene.control.RadioButton;
302
-
303
- import javafx.scene.layout.BorderPane;
304
-
305
- import javafx.scene.layout.FlowPane;
306
-
307
- import javafx.stage.Stage;
308
-
309
-
310
-
311
- public class Main extends Application {
312
-
313
- Label label;
314
-
315
-
316
-
317
-
318
-
319
- public static void main(String[] args) {
320
-
321
- launch(args);
322
-
323
- }
324
-
325
-
326
-
327
- @Override
328
-
329
- public void start(Stage stage) throws Exception {
330
-
331
- label = new Label("診断");
332
-
333
-
334
-
335
- RadioButton btn1 = new RadioButton("下痢");
336
-
337
- RadioButton btn2 = new RadioButton("嘔吐");
338
-
339
- RadioButton btn3 = new RadioButton("宿便");
340
-
341
-
342
-
343
- if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd");}
344
-
345
- if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ckd");}
346
-
347
-
348
-
349
- BorderPane pane = new BorderPane();
350
-
351
- pane.setTop(label);
352
-
353
- FlowPane flow = new FlowPane();
354
-
355
- flow.getChildren().add(btn1);
356
-
357
- flow.getChildren().add(btn2);
358
-
359
- flow.getChildren().add(btn3);
360
-
361
- pane.setCenter(flow);
362
-
363
- Scene scene = new Scene(pane, 320, 120);
364
-
365
- stage.setScene(scene);
366
-
367
- stage.show();
368
-
369
- }
370
-
371
-
372
-
373
391
  }
374
392
 
393
+ ```
394
+
375
395
 
376
396
 
377
397
  ラジオボタンで選択された状況を取得するisSelected()メソッドを使ってbtn1とbtn2が選ばれていればラベルをibdに変える、

3

追記

2017/09/27 06:20

投稿

vetom
vetom

スコア8

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- ボックスaで"下痢","嘔吐"を選択した場合、
35
+ ボックスaで"下痢"を選択した場合、
36
36
 
37
37
  その選択肢を含む心臓病が帰ってくる。
38
38
 
@@ -40,6 +40,40 @@
40
40
 
41
41
  その選択肢を含む心臓病、腎臓病が返ってくる。
42
42
 
43
+ ボックスaで"宿便"を選択した場合、
44
+
45
+ その選択肢を含む腎臓病が返ってくる。
46
+
47
+ ボックスaで"下痢""嘔吐"を選択した場合、
48
+
49
+ その選択肢を含む心臓病、腎臓病が返ってくる。
50
+
51
+ ボックスaで"下痢""宿便"を選択した場合、
52
+
53
+ その選択肢を含む心臓病、腎臓病が返ってくる。
54
+
55
+ ボックスaで"宿便""嘔吐"を選択した場合、
56
+
57
+ その選択肢を含む心臓病、腎臓病が返ってくる。
58
+
59
+ ボックスaで"下痢""宿便""嘔吐"を選択した場合、
60
+
61
+ その選択肢を含む心臓病、腎臓病が返ってくる。
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
43
77
 
44
78
 
45
79
  こういうものを書くときに必要な知識って何ですか?
@@ -50,6 +84,192 @@
50
84
 
51
85
 
52
86
 
87
+
88
+
89
+ //追記分
90
+
91
+ 積集合で病名を取り出す方法を考えてみました。
92
+
93
+ 全パターンを網羅したわけではないですが、一応下のコードではdiarrheaとvomitの積集合でibdをピックアップすることができました
94
+
95
+
96
+
97
+ Set<String> diarrhea = new HashSet<String>();
98
+
99
+ diarrhea.add("ibd");
100
+
101
+
102
+
103
+ Set<String> vomit = new HashSet<String>();
104
+
105
+ vomit.add("ckd");
106
+
107
+ vomit.add("ibd");
108
+
109
+
110
+
111
+ Set<String> constipation = new HashSet<String>();
112
+
113
+ constipation.add("akd");
114
+
115
+
116
+
117
+ Set<String> dehydration = new HashSet<String>();
118
+
119
+ dehydration.add("akd");
120
+
121
+ dehydration.add("ibd");
122
+
123
+
124
+
125
+ Set<String> intersection = new HashSet<String>(diarrhea);
126
+
127
+ intersection.retainAll(vomit);
128
+
129
+ for(String s: intersection) {System.out.println(s);}
130
+
131
+
132
+
133
+ //ただ今回のピックアップのイメージは和集合なので、diarrheaとvomitの和集合ibdとckdをピックアップしました。
134
+
135
+
136
+
137
+ Set<String> union = new HashSet<String>(diarrhea);
138
+
139
+ union.addAll(vomit);
140
+
141
+
142
+
143
+ for(String u: union) {System.out.println(u);}
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+ /*ただこれをGUIに組み込もうとしたときに手詰まりになってしまいます。
152
+
153
+ 今まで考えた方法はチェックボックスやラジオボタンのON状態をisSelected()で取得してif文でtrueならラベルを
154
+
155
+ setTextで変更するというものです。
156
+
157
+
158
+
159
+      例えばこういう感じです(上記の和集合コードは組み込めてません、以前に考えてみたものです)
160
+
161
+
162
+
163
+ RadioButton btn1 = new RadioButton("下痢");
164
+
165
+ RadioButton btn2 = new RadioButton("嘔吐");
166
+
167
+ RadioButton btn3 = new RadioButton("宿便");
168
+
169
+ RadioButton btn4 = new RadioButton("脱水");
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+ if(btn1.isSelected()) {label.setText("akd,ckd"); }
178
+
179
+
180
+
181
+ if(btn2.isSelected()) {label.setText("ibd,ckd"); }
182
+
183
+
184
+
185
+ if(btn3.isSelected()) {label.setText("ibd"); }
186
+
187
+
188
+
189
+ if(btn4.isSelected()) {label.setText("akd"); }
190
+
191
+
192
+
193
+ if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd,ckd,akd"); }
194
+
195
+
196
+
197
+ if(btn1.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd,akd"); }
198
+
199
+
200
+
201
+ if(btn1.isSelected()&&btn4.isSelected()) {label.setText("ckd,akd"); }
202
+
203
+
204
+
205
+ if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd"); }
206
+
207
+
208
+
209
+ if(btn2.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
210
+
211
+
212
+
213
+ if(btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,akd"); }
214
+
215
+
216
+
217
+
218
+
219
+ if(btn1.isSelected()&&btn2.isSelected()&&btn3.isSelected()) {label.setText("ibd,ckd,akd"); }
220
+
221
+
222
+
223
+
224
+
225
+ if(btn1.isSelected()&&btn2.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
226
+
227
+
228
+
229
+
230
+
231
+ if(btn1.isSelected()&&btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
232
+
233
+
234
+
235
+
236
+
237
+ if(btn2.isSelected()&&btn3.isSelected()&&btn4.isSelected()) {label.setText("ibd,ckd,akd"); }
238
+
239
+
240
+
241
+
242
+
243
+ if(btn1.isSelected()&&btn2.isSelected()&&bt34.isSelected()&&btn4.isSelected())                        {label.setText("ibd,ckd,akd"); }
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+ ただこの方法だと最初のラベル表示から変更されません。そもそも和集合のコードを組み込めてませんし、冗長です。
252
+
253
+     
254
+
255
+
256
+
257
+ RadioButton btn1 = new RadioButton("下痢");
258
+
259
+ btn1.setOnAction( (ActionEvent)-> {label.setText("ckd")});
260
+
261
+
262
+
263
+
264
+
265
+ のようなコードだとラベルを変更できるのですが、複数選択の和集合を想定しているので一つのボタンにたいして
266
+
267
+ 一つの答えみたいになるのはイメージとは異なります。
268
+
269
+
270
+
271
+
272
+
53
273
  ###発生している問題・エラーメッセージ
54
274
 
55
275
 

2

タグの追加

2017/09/27 05:39

投稿

vetom
vetom

スコア8

test CHANGED
File without changes
test CHANGED
File without changes

1

やってみたコードを追加

2017/09/27 01:36

投稿

vetom
vetom

スコア8

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  例えば
18
18
 
19
- ボックスaには("a","b","c","d","e","f".....""""""""""""""&quo
19
+ ボックスaには("下痢","嘔吐","宿便","d","e","f".....""""""""""""""&quo
20
20
 
21
21
  """")
22
22
 
@@ -24,19 +24,19 @@
24
24
 
25
25
  結果には
26
26
 
27
- 心臓病("a","d","e")
27
+ 心臓病("下痢","嘔吐")
28
28
 
29
- 腎臓病("b","c","e")
29
+ 腎臓病("嘔吐","宿便")
30
30
 
31
31
  が格納してあります。
32
32
 
33
33
 
34
34
 
35
- ボックスaでa,dを選択した場合、
35
+ ボックスaで"下痢","嘔吐"を選択した場合、
36
36
 
37
37
  その選択肢を含む心臓病が帰ってくる。
38
38
 
39
- ボックスaでeを選択した場合、
39
+ ボックスaで"嘔吐"を選択した場合、
40
40
 
41
41
  その選択肢を含む心臓病、腎臓病が返ってくる。
42
42
 
@@ -68,7 +68,99 @@
68
68
 
69
69
  ###試したこと
70
70
 
71
+ package application;
72
+
73
+
74
+
75
+ import javafx.application.Application;
76
+
77
+ import javafx.scene.Scene;
78
+
79
+ import javafx.scene.control.Label;
80
+
81
+ import javafx.scene.control.RadioButton;
82
+
83
+ import javafx.scene.layout.BorderPane;
84
+
85
+ import javafx.scene.layout.FlowPane;
86
+
87
+ import javafx.stage.Stage;
88
+
89
+
90
+
91
+ public class Main extends Application {
92
+
93
+ Label label;
94
+
95
+
96
+
97
+
98
+
99
+ public static void main(String[] args) {
100
+
71
- マップや正規表現でのマッチング
101
+ launch(args);
102
+
103
+ }
104
+
105
+
106
+
107
+ @Override
108
+
109
+ public void start(Stage stage) throws Exception {
110
+
111
+ label = new Label("診断");
112
+
113
+
114
+
115
+ RadioButton btn1 = new RadioButton("下痢");
116
+
117
+ RadioButton btn2 = new RadioButton("嘔吐");
118
+
119
+ RadioButton btn3 = new RadioButton("宿便");
120
+
121
+
122
+
123
+ if(btn1.isSelected()&&btn2.isSelected()) {label.setText("ibd");}
124
+
125
+ if(btn2.isSelected()&&btn3.isSelected()) {label.setText("ckd");}
126
+
127
+
128
+
129
+ BorderPane pane = new BorderPane();
130
+
131
+ pane.setTop(label);
132
+
133
+ FlowPane flow = new FlowPane();
134
+
135
+ flow.getChildren().add(btn1);
136
+
137
+ flow.getChildren().add(btn2);
138
+
139
+ flow.getChildren().add(btn3);
140
+
141
+ pane.setCenter(flow);
142
+
143
+ Scene scene = new Scene(pane, 320, 120);
144
+
145
+ stage.setScene(scene);
146
+
147
+ stage.show();
148
+
149
+ }
150
+
151
+
152
+
153
+ }
154
+
155
+
156
+
157
+ ラジオボタンで選択された状況を取得するisSelected()メソッドを使ってbtn1とbtn2が選ばれていればラベルをibdに変える、
158
+
159
+ btn2とbtn3が選ばれていればラベルをckdに変える、みたいなイメージで作ったんですがうまくいきませんでした
160
+
161
+
162
+
163
+
72
164
 
73
165
 
74
166