【问题标题】:Java Stock Viewer Application IssueJava Stock Viewer 应用程序问题
【发布时间】:2017-05-24 08:52:05
【问题描述】:

在过去的几个小时里,我一直试图找出这个股票查看器应用程序的问题。我昨天让它工作得很好,今天做了一些编辑,然后试图将它恢复到原来的形式。现在,不再打印StockClient(2016 年 1 月 7 日至 2017 年 1 月 7 日)所列日期的所有股票价格,而是从 2 月开始。请帮忙!

股票浏览类:

import java.util.*;
import java.net.URL;
import java.net.URLConnection;

public class StockViewer 
{
    private ArrayList<String> dates;
    private ArrayList<String> opens;
    private ArrayList<String> highs;
    private ArrayList<String> lows;
    private ArrayList<String> closes;
    private ArrayList<String> volumes;
    private ArrayList<String> adjCloses;
    private String sym;
    private boolean success = false;

public StockViewer(String symbol)
{   
    dates = new ArrayList<String>();
    opens = new ArrayList<String>(); 
    highs = new ArrayList<String>(); 
    lows = new ArrayList<String>(); 
    closes = new ArrayList<String>(); 
    volumes = new ArrayList<String>(); 
    adjCloses = new ArrayList<String>();

    sym = symbol;
}

public void viewStock(GregorianCalendar begin, GregorianCalendar fin)
{
    while(!success)
    {
        String url = "http://chart.finance.yahoo.com/table.csv?s=" + sym + 
                "&a=" + begin.get(Calendar.MONTH) + 
                "&b=" + begin.get(Calendar.DAY_OF_MONTH) + 
                "&c=" + begin.get(Calendar.YEAR) + 
                "&d=" + fin.get(Calendar.MONTH) + 
                "&e=" + fin.get(Calendar.DAY_OF_MONTH) +
                "&f=" + fin.get(Calendar.YEAR) + 
                "&g=d&ignore=.csv";
        try
        {
            URL yhooFin = new URL(url);
            URLConnection data = yhooFin.openConnection();
            Scanner input = new Scanner(data.getInputStream());
            if(input.hasNext()) // skip a line (that's the header)
                input.nextLine();
            // start reading data
            while(input.hasNextLine())
            {
                String line = input.nextLine();
                String[] elements = line.split(",");
                success = true;
                dates.add(elements[0]);
                opens.add(elements[1]);
                highs.add(elements[2]);
                lows.add(elements[3]);
                closes.add(elements[4]);
                volumes.add(elements[5]);
                adjCloses.add(elements[6]);
                for(int count = 0; count < elements.length; count++)
                {
                    if(count < 6)
                        System.out.print(elements[count] + " - ");
                    else
                        System.out.print(elements[count] + "\n");
                }
            }
        }
        catch(Exception e)
        {}
    }
}

public void viewStockCurrent(GregorianCalendar c1, GregorianCalendar c2)
{
    viewStock(c1, c2);
}
}

股票客户类别:

import java.util.*;

public class StockClient 
{

    public static void main(String[] args) 
    {
        Scanner scan = new Scanner(System.in);

        System.out.print("Please enter a stock symbol: ");
        String symbol = scan.next();

        StockViewer stock = new StockViewer(symbol);

        GregorianCalendar start = new GregorianCalendar(2016, 1, 7);
        GregorianCalendar end = new GregorianCalendar(2017, 1, 7);

        stock.viewStock(start, end);
    }

}

【问题讨论】:

  • 请使用Tour,阅读How To Ask 并提供MCVE。你咨询过你的Rubber Duck吗?
  • 赞成@HermannDöppes 的评论,尤其是关于橡皮鸭的评论。原始海报——您应该在发布之前首先进行调试。如果您已经完成调试,那么您应该将这些尝试的结果与您的问题一起发布。请更新。

标签: java yahoo finance stocks


【解决方案1】:

月份属性是从零开始的,你有错误的值

GregorianCalendar start = new GregorianCalendar(2016, 1, 7);
GregorianCalendar end = new GregorianCalendar(2017, 1, 7);

详情请见Calendar.MONTH

get 和 set 的字段编号,表示月份。这是特定于日历的值。 公历和儒略历中的第一个月是JANUARY,即0;最后一个取决于一年中的月数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多