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

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

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

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

Q&A

解決済

3回答

1111閲覧

可変長配列をメソッドの中で呼び出せない

rink

総合スコア80

Java

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

0グッド

0クリップ

投稿2019/04/13 07:52

初心者です。よろしくお願いします。

今回、可変長配列「ArrayList」を、メソッドの中で呼び出してある動きを目指しているのですが、うまくいきません。書いたコードを載せます。

java

1import java.util.Scanner; 2import java.util.ArrayList; 3import java.util.*; 4 5class Nibun{ 6 7 static int key = 0; 8 9 public static void main(String[] args){ 10 11 Scanner stdIn = new Scanner(System.in); 12 ArrayList<Integer> numbers = new ArrayList<Integer>(); 13 14 System.out.print("データを入力してください。"); 15 System.out.println(" 二分探索を行う場合は88888を入力してください。"); 16 17 while(true){ 18 19 20 int n = stdIn.nextInt(); 21 //データを受け取るnは無限ループしないと何度もデータを受け取れない 22 23 if(n != 88888){ 24 25 26 if(numbers.contains(n)){ 27 28 int num = numbers.indexOf(n); 29 numbers.remove(num); 30 31 } 32 else { 33 34 numbers.add(n); 35 Collections.sort(numbers); 36 37 } 38 39 System.out.println("\n\n\n\n\n"); 40 System.out.println(numbers); 41 42 /* if(n == 555){ 43 44 System.out.print(numbers.get(2)); 45 46 }*/ 47 48 49 } 50 else if(n == 88888){ 51 System.out.println("調べたいkeyを打ち込んでください。"); 52 key = stdIn.nextInt(); 53 search(key); 54 55 56 } 57 } 58} 59static int search(int key){ 60 61 int low = 0; 62 int high = numbers.length-1; 63 while(low <= high){ 64 int middle = (low + high) / 2; 65 if(key == numbers.get(middle)){ 66 return (middle + "番目にありました。"); 67 } 68 else if(key < numbers.get(middle)){ 69 high = middle - 1; 70 } 71 else { 72 low = middle + 1; 73 } 74 } 75 return null; 76} 77} 78

エラー表示はこのようになります。

java

1Nibun.java:62: エラー: シンボルを見つけられません 2 int high = numbers.length-1; 3 ^ 4 シンボル: 変数 numbers 5 場所: クラス Nibun 6Nibun.java:65: エラー: シンボルを見つけられません 7 if(key == numbers.get(middle)){ 8 ^ 9 シンボル: 変数 numbers 10 場所: クラス Nibun 11Nibun.java:66: エラー: 不適合な型: Stringintに変換できません: 12 return (middle + "番目にありました。"); 13 ^ 14Nibun.java:68: エラー: シンボルを見つけられません 15 else if(key < numbers.get(middle)){ 16 ^ 17 シンボル: 変数 numbers 18 場所: クラス Nibun 19Nibun.java:75: エラー: 不適合な型: <null>intに変換できません: 20 return null; 21 ^ 22エラー523

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

いまnumbersはmainメソッドのローカル変数であるため、別のメソッドであるsearchメソッドから参照することが出来ません。

投稿2019/04/13 07:59

swordone

総合スコア20651

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

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

rink

2019/04/14 06:43

ArrayListをmainから出せばよかったのですね… すいませんでした。ありがとうございました!
guest

0

ベストアンサー

変数のスコープ(使える範囲)について, ご確認することをお勧めいたします.
メソッドの戻り値の型についても同様です.

投稿2019/04/13 11:26

jimbe

総合スコア12632

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

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

rink

2019/04/13 12:38

ご回答ありがとうございます! メソッドの戻り値を間違えたことに投稿してすぐに気づいたんですけど、直していませんでした…。 スコープですね、ありがとうございます。
guest

0

解決しました!
ありがとうございました!

投稿2019/04/15 17:25

rink

総合スコア80

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問