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

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

ただいまの
回答率

90.48%

  • Java

    14153questions

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

char配列に格納した値の表示について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,485

gpsgpsgps

score 14

標準入力によって得られた値をchar配列に格納し、表示するプログラムです。
(画面表示はSystem.out.printではなく、System.out.writeを使用しています)

・現在のプログラムだと、入力した文字のいちばん最初の文字が表示されません。
入力した文字をすべて表示するようにしたいです。

・5文字以上入力すると、5文字ずつ改行されてしまいます。5文字以上入力された
場合は、切り捨てられるようにしたいです。

・負の数も、5の字まで入力できるようにしたいです。

public class Sample { 

    //入力値を表示
    static void print(char[] str) {
        int i = 0;
        while (i < str.length) {
            System.out.write(str[i]);
            i++;
        }
    }

    public static void main (String[] args) throw Exception {

        //強制終了されるまでループ
        while (System.in.read() == -1) {

            char[] str = new char[5];
            int i = 0;

            while(i < str.length) {
                str[i] = (char)System.in.read();

                //改行で出力
                if(str[i] == '\n') {
                    break
                }
                i++;
            }
            print(str);
            System.out.write('\n')
        }
    }
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

・現在のプログラムだと、入力した文字のいちばん最初の文字が表示されません。
入力した文字をすべて表示するようにしたいです。
これは,

//強制終了されるまでループ
    while (System.in.read() == -1) {
        ...
    }


の部分で1回System.in.read()を呼んでしまっているためです.

public class Sample {
    public static void main(String[] args) throws java.io.IOException {
        int c;
        char[] str = new char[5];
        int i = 0;

        while ((c = System.in.read()) != -1) {
            if ((char)c == '\n') {
                break;
            }
            str[i] = (char)c;
            i++;
            if (i == str.length) {
                break;
            }
        }
        print(str);
        System.out.write('\n');
    }
}


上のように,System.in.read()の呼び出しはソースコード上は1回にして,
取得した値を順々に配列に入れていきます.
重要な事は,System.in.read()が最初に実行されるとプログラムの実行が停止し,
エンターキーが押されるまでは返って来ないということです.
押された入力はバッファにたまり,while文の条件判定の中でSystem.in.read()が呼ばれるたびに
1文字ずつ文字コードを返すようになります.
改行文字が来たか,5文字格納した後はループを出るようにbreakします.

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

・現在のプログラムだと、入力した文字のいちばん最初の文字が表示されません。 

//強制終了されるまでループ 
        while (System.in.read() == -1) {


この部分で1文字目を読み込んでいるためです。変数に格納されないため、この1文字目は消滅します。

・5文字以上入力すると、5文字ずつ改行されてしまいます。5文字以上入力された 
場合は、切り捨てられるようにしたいです。

5文字以上入力した場合、5文字目まで読んで読まれなかった文字は待機状態になります。次にread()が呼ばれた時に、待機していた文字が読み込まれます。read()は一文字ずつしか読まないため、「次に文字があるかどうか」を判断できません。そのため、切り捨てるという判断が出来なくなります。
どうしてもSystem.in.read()を使うというのなら、whileの無限ループ内にこの一連の作業を入れ込み、作業終わりに読み捨てを繰り返すしかないと思います。

while (true) {
    // 文字読み込み、配列格納、表示

    // 読み捨て
    while (System.in.read() != -1){}
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

関連した質問

  • 解決済

    javaの繰り返しに関する問題です

    java初心者です。 forの繰り返しについての質問です。

  • 解決済

    char配列

    char配列に関して、以下のプログラムを作成しました。 import java.util.Scanner; public class Sample {     public s

  • 解決済

    C, javaで文字列から奇数の文字を抽出したい

    Cかjavaで "abcdefgh" の文字列から奇数の文字列を抽出するにはどうすればいいでしょうか? "aceg" といったふうにしたいです。

  • 解決済

    【Java】System.in.read()とSystem.in.skip()について

    失礼致します。 初歩的な質問をさせて頂きます。 Javaで、以下のようなプログラムを書きました。 package java; import java.io.IOExcepti

  • 解決済

    javaのカウントアップについて

    javaのEclipseを使っています。 カウントアップ後、表示する度に、 1, 2, 3, …と表示するプログラムを作りたいです。 プログラム例を教えて下さい。 2つのインス

  • 受付中

    社員情報のプログラム

    社員情報のプログラム (JAVA) プログラの機能 (1)社員情報の追加 入力項目としては、社員番号、氏名(性、名)、生年月日(年、月、日) (3)で読み込んだ情報を追加する仕

  • 解決済

    System.out.printからSystem.out.writeへの書き換え

    単純な足し算プログラムの書き換えができません。 System.out.printではなく、System.out.writeを使用するプログラムに書き換えたいのですが、 うま

  • 解決済

    会員情報システム(Java)での作り方

    javaで会員情報システムのようなものを作りたいです。 下記の実行結果(コマンドプロンプトで実行)になるような、登録プログラムを作成したいのですが、作成方法が分かりませんので、教

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

  • Java

    14153questions

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