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

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

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

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

2094閲覧

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

Shinonome

総合スコア9

Java

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2015/04/17 02:19

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

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

今自分で考えているのが

開始

数字が入力される

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

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

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

終了

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

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

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

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

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

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

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

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

guest

回答2

0

先輩に質問したところ、Arrayやhashを使えばすぐできるとのこと

たぶんこの先輩は、変換規則の表現をArrayとHashで作れるよ、ということを述べていると思います。
JSONで書くなら、こんな感じかな。

lang

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

投稿2015/04/20 07:28

chokojori

総合スコア971

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

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

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/18 08:21

swordone

総合スコア20651

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

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

Shinonome

2015/04/20 00:37

私が考えていたのはまさに図で示されているものでした。 配列の長さが確定しないと文字を返せないというところを知らないまま配列でやろうと思っていました。 swordoneさんのやり方ですと、 入力された文字を.splitで分割、それぞれ格納 ↓ はじめの文字をmNumberに入れてなんの文字か判断 ↓ 次の文字とmNumberを比較   同じならばmCountに+1、違うならばmCountに対応した文字を配列に格納 ↓ 最後のEが来たら格納された文字を表示する のように行うということでよろしいでしょうか。 よろしくお願いいたします。
swordone

2015/04/20 05:42

なんでそこまで配列にこだわるのかがよくわからないのですが・・・ 普通ガラケーはキーを押すたびに入力地点の文字(ここで言う「文字の候補」)が変わり, 違う数字,または→キーや決定キーを押した時に候補が確定し,カーソルが次に移るという仕組みですよね? つまり,あなたの流れの中で, >次の文字とmNumberを比較 >  同じならばmCountに+1、違うならばmCountに対応した文字を配列に格納 「配列に格納」された文字は「確定した文字」として表示されていなければならないわけです. また,比較して処理するたびにmNumber,mCountに対応した文字を「文字の候補」として表示していなければいけないはずです. >最後のEが来たら格納された文字を表示する この時点で表示するのでは遅いということです(最後に決定キーを押して初めて入力した文字が見えることになる)
Shinonome

2015/04/20 08:29

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

2015/04/20 08:47

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

2015/04/20 09:17

配列を用いて組んでみたところ確かに文字を格納する配列の長さを確定させる問題に当たりました。 多めに長さをとったところ、必要のないところがnullになり表示が求められてたものになりませんでした。 StringBuilderか+演算子を用いてうまく表示させるように勉強して組んでみます。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問