2016-11-11 7 views
-1

私はJavaを学びたいと思っています。私が心に留めている基本的なプログラムのための変数とjauntを使って遊んでいます。私の目標は、他の方法で収集したデータを印刷するためにmainメソッドを使用することです。私は答えが鮮明で、私はJavaのドキュメントを読んだが、なぜこれが動作していないのか混乱していると確信しています。私はプログラムを実行すると、私が望むデータを印刷せずに実行されているようだ。さらに、spfivehundredメソッドにsysoutステートメントを追加すると、spfivehundredメソッドが無限にループしてメイン・メソッドから出てきたいデータが表示されます。どのように適切に変数を返すのですか

import com.jaunt.*; 
import com.jaunt.component.*; 

public class mainthread { 

    public static void main(String[] args) { 
     spfivehundred(); 
     double spfivehundreded = spfivehundred(); 
     System.out.println(spfivehundreded); 
    } 

    public static double spfivehundred() { 
     UserAgent userAgent = new UserAgent(); 

     try { 
      userAgent.visit("http://www.investing.com/indices/us-spx-500"); 
      String spfivehundredget = userAgent.doc.findFirst(
        "<span class=\"arial_26 inlineblock pid-166-last\">") 
        .getText(); 
      double spfivehundred = Double.parseDouble(spfivehundredget.replace(
        ",", "")); 

     } catch (JauntException e) { 

      System.err.println(e); 
     } 
     return spfivehundred(); 

    } 

} 
+2

技術的に正当な名前であっても、名前( 'spfivehundred')を再利用しないと助けになります。あなたのreturnステートメントは関数を再び呼び出しています。 – chrylis

+4

'return spfivehundred();'は再帰呼び出しを実行します。つまり、自身を無期限に呼び出します。 'return spfivehundred;' 'try'' catch'ブロックの前に' spfivehundred'を宣言する必要があります。 –

答えて

1

まず、あなたはあなたのspfivehundred方法で再帰している - あなたは解析された値を返すようにしたいです。メソッドが失敗した場合、または例外をスローした場合の値。何かのように、

public static double spfivehundred() { 
    UserAgent userAgent = new UserAgent(); 

    try { 
     userAgent.visit("http://www.investing.com/indices/us-spx-500"); 
     String spfivehundredget = userAgent.doc.findFirst(
       "<span class=\"arial_26 inlineblock pid-166-last\">") 
       .getText(); 
     return Double.parseDouble(spfivehundredget.replace(
       ",", "")); 
    } catch (JauntException e) { 
     System.err.println(e); 
    } 
    return Double.NaN; // <-- no result. 
} 

次にあなたが現在私はすべてspfivehundredに名前を付けないとつの結果をドロップ。

public static void main(String[] args) { 
    // spfivehundred(); 
    double result = spfivehundred(); 
    System.out.println(result); 
} 
+0

より良い "例外"戻り値は 'Double.NaN'です。 – Andreas

+0

迅速な対応をありがとう! 1つの質問、何が "戻り-1"ステートメントの平均。なぜ-1? –

+0

@残念。それのほうがいい。 –

関連する問題