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

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

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

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

Q&A

解決済

4回答

9188閲覧

電卓のプログラム。一文字ずつ削除していく方法。

Tutti

総合スコア83

Java

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

0グッド

0クリップ

投稿2016/08/05 05:44

編集2016/08/05 05:45

今、電卓のプログラムを作ろうと思っています。(現在、フローチャートを書いています。)
値は、 数字 → 演算子 → 数 → の順番で1文字ずつキーボードから受け取ります。
この時、whileループの中でif文をつくり一文字ずつ値を受け取っていこうと思っています。

それで、"ce"この文字が入力されたら、ceの文字の前に入力された文字を消すという作業をします。
もし、ceが3回押されたら、3つ前に入力した文字の状態まで戻らなければなりません。

この削除の方法をずっと調べたり、考えたりしているのですが、一向に進みません。
どうすすればいいのかなどを どうか教えていただけないでしょうか?

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

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

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

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

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

guest

回答4

0

java

1input = input.substring(0, input.length() - 1);

これで右端の文字を一文字消すことができます。
カンマも消せます。
配列のサイズが0だとエラーが出るので、
input.length()が0以下でないことをifで確かめたほうがいいでしょう。

投稿2016/08/05 12:11

intelf___

総合スコア868

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

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

Tutti

2016/08/08 05:32

このような仕方もあるのですね! 今後のために、頭の片隅においておきます。ありがとうございます。
guest

0

ベストアンサー

ceを検出したときは、前の文字に戻るのではなく、1つ前の計算結果(処理を実施する)に戻る、が電卓の動きになるでしょうか。

数字が入力されていれば、演算はせず数値の入力中で、
入力した値で 特定の文字+-*/=ceなどが入力されたらそれに対応する処理を実施する、の流れになるでしょう。このタイミングで計算結果を何らかの配列に保持しておけばよいでしょう。小数点も含めるならBigDecimal型が良いのかもしれません。

投稿2016/08/05 07:59

A-pZ

総合スコア12011

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

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

Tutti

2016/08/08 05:23

はい。おっしゃ通りで、”一つ前の処理に戻る”でした。 なにか、APIがあるのかと思い込んでいたので、作業が進まなかったのが原因でした。 なるほど。計算の仕方もアドバイスいただき、ありがとうございます。
guest

0

Enterなどは使わず、「ce」と続けて入力された時点で削除を実行するということですね?

キーを押したらすべてを配列に入れておくと考えてしまっていませんか?
123+56ce78ceみたいな入力を想像していると大変だと思います。
そこは変数を分けましょう。

入力中の数は変数numなどに入れていくとします。
数字以外のキーが押されたときは別の変数に入れておいて、
キーが押された時点でその変数の中身が「ce」になったら、もうひとつの変数numから1文字削除する、という流れで良いと思います。

投稿2016/08/05 06:09

NatsumiOki

総合スコア1298

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

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

Tutti

2016/08/05 06:24

変数は、このように代入できるものを用意しようと思っています! 現在の値 now =0; 演算子 operat = ""; 入力された値 input = ""; キーボード入力された値 data = ""; という感じです!!! では、 if(ceが入力されたとき) 変数はinputに入れているので、 input = ""; で初期化してあげればいいですよね? あ、ですがこのやり方だと、演算子とnowの変数に入れた値を削除できなくなるんですよね。。。。 うーん。難しいですね。 もう少し考えて見ます。 ありがとうございます!
NatsumiOki

2016/08/05 08:14

うーん、やはりinputにずらずらと入れた入力の履歴というか結果の文字列で考えてるのかな? だとしたら、そっちの方法で考えます。 毎回キー入力があった時点でそれが何のキーか判定すると思いますので、 数字なら続けて入力、演算子ならその時点までの入力内容を一度計算する。 このとき、もう一つ計算結果を保持するための変数が必要になると思います。 ついでに、入力されたものが数字でも演算子でもなければ、それはinputに入れずにdataに保持しておき、「ce」となった時点で、inputの一番最後の文字を削除すればよいのではないでしょうか。
Tutti

2016/08/08 05:31

返信が遅くなり失礼しました。 おっしゃるとおりです。やっと、電卓の流れが理解できしました。 電卓の特殊なAPIがあるのだと思い込んでしまっていたので、そこで混乱して作業が進まなかったのが原因でした。 この消していくという作業は、if文で解決できそうなので、if文でして見ます! お時間を割いてまでいろいろと考えていただき、貴重な意見をありがとうございます。
guest

0

入力したものを配列やListなんかに入れておいて、押されたのがceであれば最後の要素を削除するという方法でいかがでしょうか?

投稿2016/08/05 05:54

s.t.

総合スコア2021

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

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

Tutti

2016/08/05 06:13

今は、配列に入れないでしようと考えております。 ですが、配列のときのパターンも考えてみようと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問