2016-10-19 7 views
0

です。私は、Javaの変数スコープを理解して胸焼けをしています。特に、クラス全体でスコープが設定され、そのクラス内のメソッドで使用されているが、メソッドから離れると値を保持できない変数の場合私はその点を得ていない。変数全体のスコープは

メソッド内で変数のスコープを設定した場合、メソッド外では使用できないと考えられます。しかし、そのクラスのスコープで、そのクラスのメソッドで使用されていますが、変数の値はメソッドの外部からアクセスできません。コードの行数が40行に満たない場合、6時間後には明らかになるはずですが、私は明らかにスマートではありません。Javaのスコープについて考えていないのですか?

package myExperimentTests; 

import myExperiment.DataUtilities; 

public class MyExperimentTests { 
public static String num = "2223334444"; 
public static String ocn = "4134"; 
public static String company = "This and That, Inc."; 
public static long iterations = 1000000; 
public static long startTime, stopTime; 
public static long accumalatedTime; 

public static void main(String[] args) { 

    DataUtilities utils = new DataUtilities(); 

    for (int i=0; i<iterations; i++){ 

     startTime = System.currentTimeMillis(); 
     utils.IsPhoneNumberChar(num.toCharArray(), 10, 10); 
     stopTime = System.currentTimeMillis();  
     accumalatedTime += stopTime - startTime; 
    }  
    System.out.println("Evaluating " + num + " as array of char 1Mil times: " + accumalatedTime/iterations); 

    for (int i=0; i<iterations; i++){ 
     startTime = System.currentTimeMillis(); 
     utils.IsPhoneNumberString(num, 10, 10); 
     stopTime = System.currentTimeMillis();  
     accumalatedTime += stopTime - startTime; 
    } 
    System.out.println("Evaluating " + num + " as string 1Mil times: " + accumalatedTime/iterations); 
} 
} 

私は、なぜ私は初心者が提案答えはこれへの答えと同じになります知っている理由を説明するように頼まれていますかわかりません。私の未経験では、これは可変のスコープの問題であると信じられました。データ型/除算の問題ではありませんでした。

+0

これらの変数は 'DataUtilities'クラス内にありますか?その場合は、そのコードを含めてください。私はあなたがしようとしているものに対して間違って変数を宣言していると思います。 – forgivenson

+1

あなたは1つのメソッドしか持っていません。メソッドのコードを含めることができますか?変数は "メソッドの外でアクセスできません" –

+2

スコープはJavaで非常に簡単です。変数は、 '{' '}'の中のどこでも使用できます。 –

答えて

1

問題はデータ型に関連しています。ロング/フロート/分割など

System.out.println("Evaluating " + num + " as array of char 1Mil times: " + (float)accumalatedTime/(float)iterations); 
また

、小さなデバッグチップ:

印刷各varの値(および/またはデバッガを使用)し、例えばだけでなく、計算

System.out.println("accumulatedTime " + accumalatedTime); 
System.out.println("iters " + iterations); 
System.out.println("Evaluating " + num + " as array of char 1Mil times: " + (float)accumalatedTime/(float)iterations); 
+0

デバッガを使用していました。データ型を指摘してくれてありがとう...すべてが必要とするのは、実際よりも問題を悪化させるのに役立つ経験がないことです。 – EricO