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

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

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

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

Q&A

解決済

2回答

1198閲覧

Java 入力された数字をリストから削除されるようにしたい

snmn16

総合スコア12

Java

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

0グッド

0クリップ

投稿2019/04/01 08:31

現在、キーボードで入力した数字を、予め用意されたリストから削除されるコードを記述しているのですが、記述しいざ実行しても入力されたものと違う数字が消えてしまいます。
どうやら要素番号?を削除しているのではないかと言うことはぼんやりわかったのですが、ここからどうするべきかが分かっておりません。

発生している問題・エラーメッセージ

【黒ひげ危機一髪ゲーム!】 下記から好きな数字を入力してください。 [1,2,3,4,5,6,7,8,9,10] 2 セーフ! 下記から好きな数字を入力してください。 [1, 2, 4, 5, 6, 7, 8, 9, 10] 3 セーフ! 下記から好きな数字を入力してください。 [1, 2, 4, 6, 7, 8, 9, 10] 4 【ドッカーン!!】

該当のソースコード

Java

1 2```package kurohige; 3 4import java.util.ArrayList; 5import java.util.List; 6import java.util.Scanner; 7 8 public class Kurohige { 9 10 public static void main(String[] args) { 11 12 System.out.println("【黒ひげ危機一髪ゲーム!】"); 13 System.out.println("下記から好きな数字を入力してください。"); 14 System.out.println("[1,2,3,4,5,6,7,8,9,10]"); 15 Scanner scan = new Scanner(System.in); 16 int inputValue = scan.nextInt(); 17 18 List<Integer> list = new ArrayList<Integer>(); 19 20 list.add(1); 21 list.add(2); 22 list.add(3); 23 list.add(4); 24 list.add(5); 25 list.add(6); 26 list.add(7); 27 list.add(8); 28 list.add(9); 29 list.add(10); 30 31 while(inputValue != 4) { 32 // ↑か 33 34 System.out.println("セーフ!"); 35 System.out.println(""); 36 System.out.println("下記から好きな数字を入力してください。"); 37 list.remove(inputValue); 38 // ↑これ 多分これ 39 40 System.out.println(list); 41 inputValue = scan.nextInt(); 42 43 } 44 scan.close(); 45 System.out.println("【ドッカーン!!】"); 46 } 47} 48 49### 試したこと 50 51削除される場所がずれるなら、list.remove(inputValue-1)などと記述すればいいのではないかと思い試しましたが、当然と言えば当然ですがしっかり消えるのは1以外を入力した場合のみでその後はやはりずれて行きました。 52 53### 補足情報(FW/ツールのバージョンなど) 54 55ここにより詳細な情報を記載してください。

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

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

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

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

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

nskydiving

2019/04/01 08:52

コードがコードタグに囲まれていないようですので、修正してください。 ```java ここにコードを書きます。 ```
guest

回答2

0

メソッドが想定通りの働きをしてくれないときは、何より先にリファレンスを見ましょう。

E remove​(int index)

このリスト内の指定された位置にある要素を削除します(オプションの操作)。

引用元: List (Java SE 10 & JDK 10 )

どうやら要素番号?を削除しているのではないか

この推測でビンゴなのですが、憶測ではなく確証を持ってコードを組んでいきたいものです。


解決策は主に二つあり、後者の方が直接的でお勧めです。
なお、削除したい要素が含まれていないときの挙動は双方で異なります。

  1. 削除したい要素のindexを取得して、それを利用する方法

List#remove(int)を活かす考え方です。
リファレンスをつらつらと見ると、List#indexOf​(Object)が使えそうなことが分かります。
0. 削除したい要素を直接指定する方法
List#remove(Object)を利用します。

どちらの方法を選ぶにしても、Integer型のオブジェクトを利用する必要があります。
intから同じ数値を表すIntegerを得たいときはInteger.valueOf(int)が有用です。

おまけ

Java

1class MyClass { 2 void func(int arg) { 3 System.out.println("MyClass#func(int): " + arg); 4 } 5 void func(Object arg) { 6 System.out.println("MyClass#func(Object): " + arg); 7 } 8} 9 10class Main { 11 public static void main(String[] args) { 12 int num1 = 6; 13 Integer num2 = 42; 14 15 MyClass myClass = new MyClass(); 16 17 myClass.func(num1); // MyClass#func(int): 6 18 myClass.func(num2); // MyClass#func(Object): 42 19 myClass.func(Integer.valueOf(num1)); // MyClass#func(Object): 6 20 } 21}

Wandbox

投稿2019/04/01 08:52

編集2019/04/01 09:09
LouiS0616

総合スコア35658

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

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

0

ベストアンサー

list.remove(inputValue);
// ↑これ 多分これ

ここですね。

list の中身は [1,2,3,4,5,6,7,8,9,10] なので、最初の要素は「1」ですが、list の最初のインデックスは「0」なので、一つずれてしまいます。

[1,2,3,4,5,6,7,8,9,10] の最初(0 番目)の要素「1」を削除したい場合は、list.remove(0)とする必要があります。

最初は List のインデックスが 0 から始まることに違和感を感じるかもしれませんが、そういうものだと思ってください。

投稿2019/04/01 09:02

nskydiving

総合スコア6500

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問