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

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

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

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

Q&A

1回答

580閲覧

returnで正しいものを返したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2020/05/27 00:10

サイズ5のArrayStackの時に、pop()メソッドを実行すると戻り値は空の時は-1、それ以外は直前に入れた要素を返したい(5を返したい)のですが、結果はどちらも戻り値は「4」で返ってきてしまいます。
これを正しく返したいときはpop()メソッドのretrun文をどのようにすればいいのでしょうか?

java

1import java.util.List; 2import java.util.ArrayList; 3 4public class ArrayStack implements Stack{ 5 private List<Integer> dataStack = new ArrayList<Integer>(); 6 private int maxSize;//スタックに格納できる最大要素数 7 8/*属性maxSizeを引数で指定したsizeで初期化する。*/ 9 public ArrayStack(int size){ 10 this.maxSize = size; 11 } 12 13/*引数で指定したdata(1以上の整数)をスタックの末尾に追加する。 14属性maxSizeの要素数に達していない場合は追加できる。 15追加できる場合はtrue、追加できない場合はfalseを返す*/ 16 public boolean push(int data){ 17 boolean stack = false; 18 if(dataStack.size() < this.maxSize && data > 0) 19 for(int i=0; i<this.maxSize; i++){ 20 dataStack.add(i); 21 stack = true; 22 } else{ 23 stack = false; 24 } 25 return stack; 26 } 27 28/*スタックの末尾から要素を取り出して返す。空の場合、-1を返す。*/ 29 public int pop(){ 30 if(dataStack.isEmpty()){ 31 return -1; 32 } 33 return dataStack.get(dataStack.size()-1); 34 } 35 36/*スタックの要素数を返す*/ 37 public int getSize(){ 38 return dataStack.size(); 39 } 40}

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

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

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

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

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

gentaro

2020/05/27 00:50

インデントがメチャクチャなので揃えた方が良いのと、このクラスを使う側のコードも提示しないと何故「4」が返されるのか意味不明な気が。(「4」を入れてるコードがない) あとpop()で取り出した要素をdataStackから削除しないで良いんですか? インスタンス作成てからpushを1回でも読んだら「空の時」ってのがあり得ないと思うんですが。
momon-ga

2020/05/27 01:12

質問の意味があまりよくわかってないですが、少なくともpopしたら、そのオブジェクトはリムーブしないといけないのでは?
takasima20

2020/05/27 01:20 編集

push() のとこ、中カッコの対応とれてなくないスか? あと for文のとこなにがしたいのかな?
guest

回答1

0

{}のくくりもごちゃごちゃですね。
このままソースコードを貼り付けるとコンパイルエラーになりませんか?

以下のようになっている、と想像してコメントすると、

// {}を修正 public boolean push(final int data) { boolean stack = false; if (dataStack.size() < this.maxSize && data > 0) { for (int i = 0; i < this.maxSize; i++) { dataStack.add(i); stack = true; } } else { stack = false; } return stack; }
// 呼出し部分 public static void main(String[] args){ ArrayStack arrayStack = new ArrayStack(5); arrayStack.push(2); // ← 5より小さい数を指定した際にaddされますが、引数にあまり意味がないようなので、適当な数にしています System.out.println(arrayStack.pop()); System.out.println(arrayStack.getSize()); }

出力結果は

4 // arrayStack.pop() の結果 5 // arrayStack.getSize() の結果

です。

push(int data)

pop()の戻り値が4になってしまうのは、
push()のfor文で追加しているのが i(0~4までの数値)だから、ですね。

余談ですが、この引数datadataStackに追加されるんではないんですね?
push()が呼ばれる度にfor文で0からmaxSizeまでadd()されるようになってますが、
dataStackのsize()、maxSize以上になりませんか?

投稿2020/05/27 01:25

編集2020/05/27 01:31
kaputaros

総合スコア1844

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問