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

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

ただいまの
回答率

90.84%

  • Java

    12487questions

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

Java:5×5の2次元配列を作成し、画面から入力した3つの座標に☆印をつけて出力

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 142

Terra.

score 7

 前提・実現したいこと

こんばんは、Java初心者です。
Javaについての質問です。
とあるJavaの問題で引き続き困っています。お助け願います…
下記が問題文となります。

 問題文

5×52次元配列を作成し、画面から入力した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   ☆

4     ☆

※何故か出力結果の図の空白部が上手く表示されなかった為、下線(_)を入れていますが、表現したい実際の出力の結果では下線は無いもの(空白)としてお考えください。※

現状未完の状態のため、実行結果は出せておりません。
恐らく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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2018/04/27 15:46 編集

    一次元配列で入力が一つだと分かるのでしょうか?例えば、3を入力すると □□☆□□ と出力するような。徐々にステップアップ(拡張)していけば、何が分からないのか(どこで躓くのか)が明確になり、ピンポイントで質問できる & 少なからずコードを提示出来ると思います。

    キャンセル

回答 3

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
☆★★★★
★★★★★
★★★★☆
★☆★★★
★★★★★

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 23:56

    確認が遅くなってしまい大変申し訳ございません…!
    質問して1週間ほど迷走した末に解くことができたのですが、いろいろあってログインできず、コメント遅くなってしまい恐縮です。
    当たり前のことだとは思いますが自分が解いた答えとは異なる解の導き方で、こういった記述の仕方もあるのだと大変参考になりました…!詳しくありがとうございます。
    毎度コメントにアドバイスも頂けて大変有難く思います、精進いたします!

    キャンセル

0

starはintの配列ではなく、booleanの配列の方が扱いやすいかと思います。


入力

for(3回繰り返す) {
    xを読み込む;
    yを読み込む;

    star[y][x]にtrueを代入;
}

出力
タテとヨコ、それぞれについて巡回が必要なので二重ループを使います。
その座標におけるstarの値を確認し、真であれば☆を出力すれば良いです。

for(5回繰り返す) {
    for(5回繰り返す) {
        if(...) {
            ☆を出力;
        }
        else {
            空白を出力;
        }
    }
}

...の部分を書いてしまうとほぼ答えになるので、そこは伏せておきます。
また、枠を付けるのはとりあえず後回しで良いでしょう。


Javaの基本の基本程度の内容でお教え頂けると大変助かります。

少し厳しいようですが、この問題は基本の基本で解ける内容です。
全くやり方が分からないようなら、参考書などのコードを読むことから始めるべきです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/19 02:37

    早速のご回答いただきありがとうございます。
    仰る通り、基本中の基本の問題でつまづいているのは他でもない私自身の理解不足で、大変お恥ずかしい限りなのですが、教本片手に考えてもどうしても分からず、気づきをいただきたくこちらに参った次第です。
    ですから、ご丁寧な回答にお言葉いただき大変助かります。改めましてありがとうございます。
    お教えいただいたことを参考にまた内容を考えてみたいと思います!

    キャンセル

-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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/19 23:10

    コメントが遅くなってしまい大変失礼いたしました、こんばんは、ご回答くださりありがとうございます。
    ただ、大変恐縮なのですがこちらの問題はJavaで解かなければいけないものなのでごめんなさい、今回お教えいただいたこと(シェルというものもあるのですね…)は別の場合に活かさせていただこうと思います…!

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12487questions

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