質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

3回答

1204閲覧

別クラスのデータを取ってきたいのですがnullになってしまう

oisii

総合スコア6

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/03/24 02:34

編集2020/03/24 02:53

前提・実現したいこと

hit&blowのゲームを製作しています。スコア部分の表示で困っています。

発生している問題・エラーメッセージ

ゲームクリア後の表示に最初に入力した名前と現在の日付、ゲームクリア時刻を表示したいのですが現状nullになってしまいデータが表示されません。
まだ知識が浅く理解できない部分もあるかもしれませんが宜しくお願い致します。

該当のソースコード

java

1package game; 2 3import java.util.Arrays; 4import java.util.Scanner; 5public class MathGame { 6 public static void main(String[] args) { 7 // TODO 自動生成されたメソッド・スタブ 8 System.out.println("名前を入力してください"); 9 Score score = new Score(); 10 String name = score.getName(); 11 System.out.println("ゲームを始めます"); 12 int answer[] = new int[4]; 13 answer[0] = (int) (Math.random() * 9) + 1; 14 for (int i = 1; i < answer.length; i++) { 15 int num = -1; 16 for (boolean isNotExist = false; !isNotExist;) { 17 num = (int) (Math.random() * 10); 18 isNotExist = true; 19 for (int j = 0; j < answer.length; j++) { 20 if (answer[j] == num) { 21 isNotExist = false; 22 break; 23 } 24 } 25 } 26 if (num < 0) { 27 throw new IllegalStateException(); 28 } 29 answer[i] = num; 30 } 31 Arrays.stream(answer).forEach(System.out::println); 32 33 int input[] = new int[4]; 34 int count = 1; 35 while (true) { 36 System.out.println("4文字の数字を入力してください"); 37 String sc = new Scanner(System.in).nextLine(); 38 boolean error = false; 39 int length = sc.length(); 40 if (length != 4) { 41 error = true; 42 } 43 for (int i = 0; i < length; i++) { 44 char c = sc.charAt(i); 45 if (c < '0' || c > '9') { 46 error = true; 47 } 48 } 49 for (int i = 0; i < length; i++) { 50 for (int j = i + 1; j < length; j++) { 51 if (sc.charAt(i) == sc.charAt(j)) { 52 error = true; 53 } 54 } 55 } 56 if (error == true) { 57 System.out.println("4桁の数値を入力してください"); 58 continue; 59 } 60 for (int i = 0; i < length; i++) { 61 input[i] = Integer.parseInt(sc.substring(i, (i + 1))); 62 } 63 int hit = 0; 64 for (int i = 0; i < 4; i++) { 65 if (input[i] == answer[i]) { 66 hit++; 67 } 68 } 69 int Exist = 0; 70 for (int i = 0; i < 4; i++) { 71 for (int j = 0; j < 4; j++) { 72 if (input[i] == answer[j]) { 73 Exist++; 74 } 75 } 76 } 77 if (hit == 4) { 78 System.out.println("正解です" + count + "回目で正解です"); 79 System.out.println(" "); 80 break; 81 } else { 82 System.out.println("hit" + hit + "個、Exist" + (Exist - hit) + "個"); 83 count++; 84 } 85 } 86 System.out.println(score.getClearTime() + name + score.getPlayDate()); 87 } 88}
package game; import java.util.Calendar; import java.util.Date; import java.util.Scanner; /** * ゲームのスコアを保持するクラス */ public class Score { /** プレイヤー名 */ private String name; /** カウント数 */ private int count = 0; /** プレイ日時 */ private Date playDate; /** クリア時間(ミリ秒) */ private long clearTime; /** ゲーム開始時刻(ミリ秒) */ private long startTime; /** * プレイヤー名を取得します * * @return プレイヤー名 */ public String getName() { return this.name; } /** * プレイヤー名を設定します * * @param name プレイヤー名 */ public void setName(String name) { this.name = name; } /** * カウント数を取得します * * @return カウント数 */ public int getCount() { return this.count; } /** * カウント数を設定します * * @param count カウント数 */ public int setCount(int count) { return this.count = count; } /** * プレイ日時を取得します * * @return プレイ日時 */ public Date getPlayDate() { return this.playDate; } /** * プレイ日時を設定します * * @param date プレイ日時 */ public void setPlayDate(Date date) { this.playDate = date; } /** * カウント数をインクリメントします */ public void incrementCount() { this.count++; } /** * クリア時間を取得します * * @return クリア時間(ミリ秒) */ public long getClearTime() { return this.clearTime; } /** * クリア時間を設定します * * @param clearTime クリア時間 */ public void setClearTime(long clearTime) { this.clearTime = clearTime; } /** * ゲームスタート処理を行い、初期化されたスコアオブジェクトを取得します * * @param name プレイヤー名 */ public static Score startGame(String name) { Score score = new Score(); score.setName(name); score.setCount(0); score.startTime = System.currentTimeMillis(); return score; } /** * ゲームを終了し、このスコアオブジェクトを終了状態にします */ public void endGame() { final Date date = new Date(); this.setPlayDate(date); this.setClearTime(date.getTime() - this.startTime); } Scanner sc = new Scanner(System.in); String name1 = sc.next(); Calendar cTime = Calendar.getInstance(); { System.out.println("" + cTime.get(Calendar.HOUR_OF_DAY) + "時"); System.out.println("" + cTime.get(Calendar.MINUTE) + "分"); cTime.set(Calendar.HOUR_OF_DAY, 23); cTime.set(Calendar.MINUTE, 59); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Name を name にしてみては?

Score で時分を表示している static イニシャライザに name = name1; を追加してみてください。
Score の
System.out.println("" + cTime.get(Calendar.HOUR_OF_DAY) + "時");
の前に name = name1; ですよ。

時間が null になることの修正は。

MathGame.java の
Score score = new Score(); を
Score score = Score.startGame(); に変更。
System.out.println(score.getClearTime() + name + score.getPlayDate());
の前に score.endGame(); を追加。

Score.java の
public static Score startGame(String name) { を
public static Score startGame() { に変更。
score.setName(name); を
score.setName(score.name); に変更。

最後の変更は、score.setName を削除でした。

投稿2020/03/24 02:49

編集2020/03/24 05:17
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oisii

2020/03/24 02:52

すいません。元々nameでした。こちらに移す時間違えたようです修正しときます
kazuma-s

2020/03/24 02:53

すみません。私も早とちりでした。null の件、調べてみます。
oisii

2020/03/24 03:57

追加したのですが名前は表示されません。わざわざすいません。
oisii

2020/03/24 04:14

出来ました!丁寧に教えてくださりありがとうございます!
guest

0

MathGame.java

java

1Score score = new Score(); 2String name = score.getName();

Score.java

java

1 public String getName() { 2 return this.name; 3 }

ですので, score の name は null です.

Score クラスの最後にある

java

1 Scanner sc = new Scanner(System.in); 2 String name1 = sc.next(); 3 Calendar cTime = Calendar.getInstance(); 4 { 5 System.out.println("" + cTime.get(Calendar.HOUR_OF_DAY) + "時"); 6 System.out.println("" + cTime.get(Calendar.MINUTE) + "分"); 7 cTime.set(Calendar.HOUR_OF_DAY, 23); 8 cTime.set(Calendar.MINUTE, 59); 9 }

が動作しているようですが, sc.next は name1 に入れており, name ではありません.
なお, この書き方はとても気持ち悪いものです.
初期処理であればコンストラクタとするか, 普通のメソッドにしては如何でしょうか.

もう少し細かく言えば, 点数がプレイヤー名を持つというのは変ではありませんか.
通常はプレイヤーが点数を持つべきで, Score クラスに name で無く Player クラスに name と点数(ついでにプレイ時間も...は微妙かもしれません)というのがしっくりくるように思います.

投稿2020/03/24 04:23

jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Scoreにnameを設定するのはsetNameかstartGameなのですが、mainメソッドでそのいずれも呼び出されていません。そのため初期値のnullのままになっています。

投稿2020/03/24 04:05

swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問