2017-04-14 4 views
2

私は個人的なプロジェクトに取り組んでいます。私はArraylistにデータを割り当てており、indexOf( "")でインデックスにアクセスしたいと思います。 私は2年間javaを使用していませんでした。ここでArraylist Java、Scopeの問題を修正してください

がメインで、Plo.javaを呼び出す:

import plo.tre; 

public class Plo 
{ 
    public static void main(String[] args) 
    { 
     tre test = new tre(); 

     // my problem 
     StockDownloader.nouvel(); 
    } 
} 

そして、ここでは私のtre.javaは、他のクラスである:私が何をしようとしています何

import java.util.ArrayList; 

public class tre 
{ 
    private ArrayList<String> open; 

    public tre() 
    { 
     open = new ArrayList<String>(); 

     String s = "chaine1,chaine2, chaine a, chaine b, chaine c"; 
     String str[] = s.split(","); 

     for (int i = 0; i < str.length; i++) { 
      open.add(str[i]); 
     } 
    } 

    public void nouvel() 
    { 
     System.out.println(open.get(0)); 
     int test = open.indexOf(" chaine b"); 
    } 
} 

は次のとおりです。中1 - コールメインメソッドのヌーベル、2 - 同じクラスで作成されたArraylistへのアクセスがありますが、別の方法で記入してください。

私はそれがばかげていると知っていますが、私は解決策を見つけることができませんでした。

ご協力いただきありがとうございます。

答えて

2

を試してみてください、あなたは以下に示すようにnouvel()メソッドを呼び出すためにtreクラス(すなわち、test)の基準を使用する必要があります。

test.nouvel(); 

Could you explain me what was the problem?

クラス名StockDownloader(どこに定義されているかわからない)を使用して、nouvel()メソッドを呼び出しています。クラス名は、クラスのメソッド/メンバーのstaticを呼び出すためにのみ使用できます。非staticメソッドを呼び出すには、オブジェクト参照を使用する必要があります(コードtestは、作成した新しいtreクラスオブジェクトのオブジェクト参照と呼ばれます)。

したがって、問題は、オブジェクト参照を使用して、実行していないクラスTreのクラスメンバーを呼び出す必要があることです。したがってnouvel()メソッドを呼び出すには、test(オブジェクトの参照)を使用してください。


また、私は強くあなたがコードを読みやすくなるように、Javaは命名基準は、すなわち、クラス名は大文字で始まる必要があり、次のTre(またははるかに意味のある)へのクラスの名前を変更示唆しています。

もう一つのポイントは、インスタンス変数を初期化するためのクラスのコンストラクタが意図されているということであり、あなたはそれをリファクタリングすることができますので、以下に示すように、あなたのコードが雑然とさ:

トレクラス:

public class Tre { 
    private ArrayList<String> open; 

    public Tre() { 
     open = new ArrayList<String>();//just initialize ArrayList 
    } 

    public void loadData() {//add a new method to load ArrayList 
     String s = "chaine1,chaine2, chaine a, chaine b, chaine c"; 
     String str[] = s.split(","); 

     for (int i = 0; i < str.length; i++) { 
      open.add(str[i]); 
     } 
    } 

    public void nouvel() { 
     System.out.println(open.get(0)); 
     int test = open.indexOf(" chaine b"); 
    } 
} 

をPloクラス:

public class Plo { 
    public static void main(String[] args) { 
     Tre test = new Tre();//create object for Tre with ref variable as test 
     test.loadData();//call loadData() method using test ref. 
     test.nouvel();//call nouvel() method using test ref. 
    } 
} 
+0

こんにちは、あなたの答えをありがとう、これは確かにそれを働かせる。 問題点を教えてください。 あなたは正しいです、私は命名基準を使用しないことを恥じています、そして、私はそれらを知っています...次回は、それはよりきれいになるでしょう。 – ViPro

+0

上記の説明を追加しました。 – developer

+0

あなたが書いたコードで作業します。 私は本当に私のJavaの基礎を最新にする必要があります。 私に解決策を説明してくれてありがとう、本当にありがとう。 – ViPro

0

代わりのStockDownloader.nouvel();、あなたmain()方法でtre.nouvel();

+0

こんにちは、お返事ありがとうございました これは私にこのエラーを与えました: "エラー:非静的メソッドnouvel()は静的コンテキストtre.nouvel()から参照できません;" – ViPro

+0

ええ、私は少し速かった。上に述べたように、test.nouvel()は正しいことでした。:) – faffaffaff

関連する問題