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

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

ただいまの
回答率

89.62%

Javaでトグル入力のシミュレーション

解決済

回答 2

投稿

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

Shinonome

score 8

Javaでガラケーの入力方法であるトグル入力のプログラムを書こうと思っています。
ですがそのロジックについて悩んでいるので質問させていただきます。

満たす要件は
・1~9までの文字とEが1行で入力される
・各数字の入力された回数によって文字の候補が表示される
・候補は別の数字かEが入力されることで確定される
・最後の候補文字の次ははじめの候補文字に戻ってループする
となっています。

今自分で考えているのが

開始

数字が入力される

一つづつ分けて配列に格納

今の文字と次の文字が同じなら2次元配列に格納しなおす
異なるなら次の2次元配列に格納する

各2次元配列の長さをとって対応した文字を表示させる

終了

のように考えています。
先輩に質問したところ、Arrayやhashを使えばすぐできるとのことでしたが、
まだ始めたての初心者なので使い方がわからなく躓いてしまいました。

このようなロジックで実現できるのかについて評価をしていただきたく、
今回質問させていただきました。
できれば自分で考えたいと思っていますので、
ロジックについてとどのようなもので実現できるかなどのヒントを頂きたいです。

わかりにくい文章で申し訳ありませんが、
よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

正直「なぜに配列?」という印象です.
こういうことでしょうか?

111222233E3336444755

[1][1][1]
[2][2][2][2]
[3][3]
[E]
[3][3][3]
[6]
[4][4][4]
[7]
[5][5]
(縦方向に配列)

これでは
・各数字の入力された回数によって文字の候補が表示される 
この要件が満たされないのでは?(配列の長さに応じた文字を返すのならば,長さが確定しないと文字を返せない)

要は「連続して押されている数字とその回数」に応じた文字を表示する必要があるわけですから,
私なら
・直前の数字mNumberと連続回数mCountを管理する変数として用意
・数字(またはE)が入力される.mNumberと比較し同じならmCountに+1する.
(この時,mCountがmNumberに対応した候補文字数に達したらmCountを0にする)
違うなら候補文字を確定し,mNumberを入力された数字に,mCountを0にする.
・mNumberとmCountに応じた候補文字を表示.
このようにしますね.

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/04/20 17:29

    配列にこだわっているわけではないのですが、
    私の持っている知識ですと配列を用いてなんとかするという方向にしか行き着きませんでした。

    また、私の説明不足で、
    今回の場合は標準入力ですべての数字を打ち込んで実行した後に対応した文字を表示するもので大丈夫です。
    今のところmNumberとmCountを用いて対応した文字を配列に格納して最終的に確定した文字列を.joinを使って一つの文字列にして表示しようと思っているのですが、
    ここでも配列を用いるのはおかしいでしょうか。
    よろしくお願いいたします。

    キャンセル

  • 2015/04/20 17:47

    問題があるとすれば1つ,文字を格納する配列の長さはどうやって決めますか?
    Javaでは配列は作成時点で長さを確定させなければいけません.
    しかし,数字が入力された段階では文字数は未知です.
    もちろん,十分に長い配列を作ればある程度は大丈夫かもしれませんが,
    予想外に(出力されるべき)結果が長い文字列になる数字列が入力された場合,
    配列の長さを超えると例外が発生してしまいます.
    素直にStringBuilderか,+演算子を使うほうがいいと思います.

    キャンセル

  • 2015/04/20 18:17

    配列を用いて組んでみたところ確かに文字を格納する配列の長さを確定させる問題に当たりました。
    多めに長さをとったところ、必要のないところがnullになり表示が求められてたものになりませんでした。

    StringBuilderか+演算子を用いてうまく表示させるように勉強して組んでみます。
    ありがとうございました

    キャンセル

0

先輩に質問したところ、Arrayやhashを使えばすぐできるとのこと
たぶんこの先輩は、変換規則の表現をArrayとHashで作れるよ、ということを述べていると思います。
JSONで書くなら、こんな感じかな。

{
    "1": ["あ", "い", "う", "え", "お"],
    "2": ["か", "き", "く", "け", "こ"],
    ...
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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