Java:5×5の2次元配列を作成し、画面から入力した3つの座標に☆印をつけて出力
- 評価
- クリップ 1
- VIEW 295

退会済みユーザー
前提・実現したいこと
こんばんは、Java初心者です。
Javaについての質問です。
とあるJavaの問題で引き続き困っています。お助け願います…
下記が問題文となります。
問題文
5×5の2次元配列を作成し、画面から入力した3つの座標に☆印をつけて出力する。
作成途中のソースコード
import java.io.*;
public class Ensyu4_D{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int [][] star = new int [5][5]; //5×5の2次元配列
String str = br.readLine();
String str1 = br.readLine();
String str2 = br.readLine();
String str3 = br.readLine();
String str4 = br.readLine();
String str5 = br.readLine();
int x = Integer.parseInt(str);
int y = Integer.parseInt(str1);
int xa = Integer.parseInt(str2);
int ya = Integer.parseInt(str3);
int xb = Integer.parseInt(str4);
int yb = Integer.parseInt(str5);
//1つ目〜3つ目のX,Y座標の入力値
//ここから下の記述の仕方が分からず悩んでいます
}
}
やりたいこと
出力画面:例
1つ目のX座標を入力>1
1つ目のY座標を入力>1
2つ目のX座標を入力>2
2つ目のY座標を入力>2
3つ目のX座標を入力>3
3つ目のY座標を入力>4
出力結果
____1 2 3 4 5
1 ☆
2 ☆
3
4 ☆
5
※何故か出力結果の図の空白部が上手く表示されなかった為、下線(_)を入れていますが、表現したい実際の出力の結果では下線は無いもの(空白)としてお考えください。※
現状未完の状態のため、実行結果は出せておりません。
恐らく1~5の数値の入った表を作成し、2次元配列のそれぞれの座標((1, 1),(1, 2)……(5, 5))に空白(” “)またはnullを入れ、3つの数値が入力されたときその値の座標に☆が出力されれば良いのではとそこまで考えたのですが、お恥ずかしながらどう記述すれば良いのか見当がつきません。
2次元配列の問いのような表に値を入れるにはどうすれば良いのか…
star [0][0] に☆をどう押し込めば良いのか、ご回答くださいますと幸いです。
また、超がつくほどJavaについて初心者のため、お手数おかけしますがJavaの基本の基本程度の内容でお教え頂けると大変助かります。
何卒よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Java
java version "1.8.0_161"
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
こんにちは、完璧な回答ではないのであくまでも参考程度にお願いします。
1.まず、初めに
int [][] star = new int [5][5]; //5×5の2次元配列
と書かれていますが格納したいのは"☆"などの文字列なのでintではなくStringにしましょう。
2.入力方法について
私が書いたコードでは
1,1
2,2
4,3
のようにコンマ区切りの2つの自然数を3行にわたって入力するようにしています。
入力するデータが座標だったのでこのような形にしました。
3.質問欄には☆か空白を表示するのですが、空白でなく他の文字であらわすことで
ちゃんと入力した座標に☆があることを示すために空白のところを"★"にしました。
"★"のところを" "にすると空白になります。
4.最後、表示する文字列を格納する配列をすべて"★"で初期化します。
これをすると、あとはif文で入力された座標のところだけ"☆"にすればいいです。
else文を使おうとしたのですが、どうやらfor文の中で上書きされ"☆"が3つ表示されない場合が
あったので、こういう形にしました。
最初、初期化をするとif文だけで済みます。
5.for文で表示します。
以下、私が書いたソースコードを載せておきます。
public class Main {
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int [][]data = new int[3][2];
for(int i = 0; i < 3; i++){
String line = sc.nextLine();
String []resultArray = line.split(",");
for(int j = 0; j < 2; j++){
data[i][j] = Integer.parseInt(resultArray[j]) - 1;
}
}
String [][]star = new String[5][5];
for(int i = 0; i < 5; i++){//初期化
for(int j = 0; j < 5; j++){
star[i][j] = "★";
}
}
int count = 0;
while(count < 3){
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
if(i == data[count][0] && j == data[count][1]){
star[i][j] = "☆";
}
}
}
count++;
}
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
System.out.print(star[i][j]);
}
System.out.println();
}
}
}
<結果>
1,1
4,2
3,5
☆★★★★
★★★★★
★★★★☆
★☆★★★
★★★★★
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
starはintの配列ではなく、booleanの配列の方が扱いやすいかと思います。
入力
for(3回繰り返す) {
xを読み込む;
yを読み込む;
star[y][x]にtrueを代入;
}
出力
タテとヨコ、それぞれについて巡回が必要なので二重ループを使います。
その座標におけるstarの値を確認し、真であれば☆を出力すれば良いです。
for(5回繰り返す) {
for(5回繰り返す) {
if(...) {
☆を出力;
}
else {
空白を出力;
}
}
}
...
の部分を書いてしまうとほぼ答えになるので、そこは伏せておきます。
また、枠を付けるのはとりあえず後回しで良いでしょう。
Javaの基本の基本程度の内容でお教え頂けると大変助かります。
少し厳しいようですが、この問題は基本の基本で解ける内容です。
全くやり方が分からないようなら、参考書などのコードを読むことから始めるべきです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-2
Javaなど不要。そう、シェル芸ならね!
$ cat points
1 1
2 2
3 4
$ cat points|awk 'BEGIN{print" 12345"}{a[$1,$2]=1}END{for(y=1;y<=5;y++){l=y;for(x=1;x<=5;x++){if(a[x,y]){l=l"*"}else{l=l" "}};print l}}'|tr ' 1-5*' ' 1-5☆'
12345
1☆
2 ☆
3
4 ☆
5
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
質問への追記・修正、ベストアンサー選択の依頼
fuzzball
2018/04/27 15:43 編集
一次元配列で入力が一つだと分かるのでしょうか?例えば、3を入力すると □□☆□□ と出力するような。徐々にステップアップ(拡張)していけば、何が分からないのか(どこで躓くのか)が明確になり、ピンポイントで質問できる & 少なからずコードを提示出来ると思います。