比较Java数组中的股票价值

比较Java数组中的股票价值,java,arrays,json,Java,Arrays,Json,我设法在Eclipse中用JSON打印了这个网站 如你所见,我们有一个数组,其中包含某家公司的股票价值。该数组的长度为22。例如: ["2017-01-27",89.13,87.611,88.18,87.699,750] //Array index 2 ["2017-01-26",89.22,87.699,87.699,88.315,190]//Array index 3 ["2017-01-31",86.77,84.312,84.32,84.81,1205]//Array ind

我设法在Eclipse中用JSON打印了这个网站

如你所见,我们有一个数组,其中包含某家公司的股票价值。该数组的长度为22。例如:

["2017-01-27",89.13,87.611,88.18,87.699,750] //Array index 2
["2017-01-26",89.22,87.699,87.699,88.315,190]//Array index 3      
["2017-01-31",86.77,84.312,84.32,84.81,1205]//Array index 0
我的任务是检查哪个值更大。比如,检查89.13是否大于89.22?否,因此检查89.22>是否大于86.77,否,依此类推。然后打印出来,在哪个日期是最大的价值。问题是在Java中检查这一点。我不知道如何比较这3个(更不用说22个)

编辑:逻辑对我来说很清楚,我的问题是用Java解决这个问题。上面给出的3个例子会很好

这是我的密码:

package query;

import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;

import java.util.*;
import java.io.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class Stockquery {

public static void main(String[] args) {

    String jsonString = callURL(
            "https://www.quandl.com/api/v3/datasets/SSE/HYQ.json?start_date=2017-01-01&end_date=2017-01-31");

    try {
        JSONObject jsonobjects = new JSONObject(jsonString);

        JSONObject dataset = jsonobjects.getJSONObject("dataset");
        JSONArray array = dataset.getJSONArray("data");
        System.out.println(array.get(2));
        System.out.println(array.get(3));

        array.getString(0);
        System.out.println(array.getString(0));

    } catch (JSONException e) {
        e.printStackTrace();
    }

}

public static String callURL(String myURL) {
    // System.out.println("Requested URL:" + myURL);
    StringBuilder sb = new StringBuilder();
    URLConnection urlConn = null;
    InputStreamReader in = null;
    try {
        URL url = new URL(myURL);
        urlConn = url.openConnection();
        if (urlConn != null)
            urlConn.setReadTimeout(60 * 1000);
        if (urlConn != null && urlConn.getInputStream() != null) {
            in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
            BufferedReader bufferedReader = new BufferedReader(in);
            if (bufferedReader != null) {
                int cp;
                while ((cp = bufferedReader.read()) != -1) {
                    sb.append((char) cp);
                }
                bufferedReader.close();
            }
        }
        in.close();
    } catch (Exception e) {
        throw new RuntimeException("Exception while calling URL:" + myURL, e);
    }

    return sb.toString();
}
}

JSON数组的元素是JSON元素。因为JSON元素可以是JSON数组,所以JSON数组可以包含JSON数组作为其元素

这样做就可以了:

JSONArray array = dataset.getJSONArray("data");

// Save the first array's values
String biggestDate = array.get(0).get(0);   // index 0 is the date
double biggest     = array.get(0).get(1);   // index 1 is the stock price

// Iterate over all arrays and update biggest
for (int i = 0; i < 22; i++) {
    JSONArray arrayI = array.get(i);
    if (arrayI.get(1) > biggest) {
        biggest     = arrayI.get(1);   // updating biggest
        biggestDate = arrayI.get(0);   // updating biggest's date
    }
}

return biggestDate;
JSONArray数组=dataset.getJSONArray(“数据”);
//保存第一个数组的值
字符串biggestDate=array.get(0).get(0);//索引0是日期
双最大=数组。获取(0)。获取(1);//指数1是股票价格
//遍历所有数组并更新最大值
对于(int i=0;i<22;i++){
JSONArray arrayI=array.get(i);
if(arrayI.get(1)>最大值){
最大值=arrayI.get(1);//更新最大值
biggestDate=arrayI.get(0);//更新最大的日期
}
}
返回最大日期;
注意:未测试

  • 当然,不要使用
    22
    和其他硬编码常量
  • 使用
    double
    为简单起见,请使用
    BigDecimal
JSON数组的元素是JSON元素。因为JSON元素可以是JSON数组,所以JSON数组可以包含JSON数组作为其元素

这样做就可以了:

JSONArray array = dataset.getJSONArray("data");

// Save the first array's values
String biggestDate = array.get(0).get(0);   // index 0 is the date
double biggest     = array.get(0).get(1);   // index 1 is the stock price

// Iterate over all arrays and update biggest
for (int i = 0; i < 22; i++) {
    JSONArray arrayI = array.get(i);
    if (arrayI.get(1) > biggest) {
        biggest     = arrayI.get(1);   // updating biggest
        biggestDate = arrayI.get(0);   // updating biggest's date
    }
}

return biggestDate;
JSONArray数组=dataset.getJSONArray(“数据”);
//保存第一个数组的值
字符串biggestDate=array.get(0).get(0);//索引0是日期
双最大=数组。获取(0)。获取(1);//指数1是股票价格
//迭代所有数组并更新最大值
对于(int i=0;i<22;i++){
JSONArray arrayI=array.get(i);
if(arrayI.get(1)>最大值){
最大值=arrayI.get(1);//更新最大值
biggestDate=arrayI.get(0);//更新最大的日期
}
}
返回最大日期;
注意:未测试

  • 当然,不要使用
    22
    和其他硬编码常量
  • 使用
    double
    为简单起见,请使用
    BigDecimal
数组。get(0)。get(0)是否为您工作? 对我来说不是。我必须分析:

    Optional<String> maxRow = array.toList().stream().map(Object::toString).max(new Comparator<String>() {      @Override       public int compare(String o1, String o2) {
        return Double.valueOf(o1.split(",")[1]).compareTo(Double.valueOf(o2.split(",")[1]));        }
    });

    System.out.println("Max row: " + maxRow.get());
Optional maxRow=array.toList().stream().map(Object::toString).max(新比较器(){@Override public int compare(字符串o1,字符串o2){
返回Double.valueOf(o1.split(“,”[1]).compareTo(Double.valueOf(o2.split(“,”[1]);)
});
System.out.println(“最大行:+maxRow.get());
其结果为“最大”行:

Max row:[2017-01-26,89.22,87.699,87.699,88.315,190.0]

你做过数组。得到(0)。得到(0)为你工作吗? 对我来说不是。我必须分析:

    Optional<String> maxRow = array.toList().stream().map(Object::toString).max(new Comparator<String>() {      @Override       public int compare(String o1, String o2) {
        return Double.valueOf(o1.split(",")[1]).compareTo(Double.valueOf(o2.split(",")[1]));        }
    });

    System.out.println("Max row: " + maxRow.get());
Optional maxRow=array.toList().stream().map(Object::toString).max(新比较器(){@Override public int compare(字符串o1,字符串o2){
返回Double.valueOf(o1.split(“,”[1]).compareTo(Double.valueOf(o2.split(“,”[1]);)
});
System.out.println(“最大行:+maxRow.get());
其结果为“最大”行:


最大行:[2017-01-26,89.22,87.699,87.699,88.315,190.0]

执行以下方法

private static String getDateWithMaxValue(JSONArray array) throws JSONException {
   JSONArray stockData;
   String dateWithMaxValue = "";
   double maxValue = Double.MIN_VALUE;
   for (int i = 0; i < array.length(); i++) {
      stockData = array.getJSONArray(i);
      if (stockData.get(1) instanceof Double) {
         if (((Double) stockData.get(1)).doubleValue() > maxValue) {
            maxValue = ((Double) stockData.get(1)).doubleValue();
            if (stockData.get(0) instanceof String) {
               dateWithMaxValue = (String) stockData.get(0);
            }
         }
      }
   }
   return dateWithMaxValue;
}
main中,打印索引1处最大值的日期,其中数组是您已经声明的JSONArray


(代码测试和返回日期2017-01-26,正确)

执行以下方法

private static String getDateWithMaxValue(JSONArray array) throws JSONException {
   JSONArray stockData;
   String dateWithMaxValue = "";
   double maxValue = Double.MIN_VALUE;
   for (int i = 0; i < array.length(); i++) {
      stockData = array.getJSONArray(i);
      if (stockData.get(1) instanceof Double) {
         if (((Double) stockData.get(1)).doubleValue() > maxValue) {
            maxValue = ((Double) stockData.get(1)).doubleValue();
            if (stockData.get(0) instanceof String) {
               dateWithMaxValue = (String) stockData.get(0);
            }
         }
      }
   }
   return dateWithMaxValue;
}
main中,打印索引1处最大值的日期,其中数组是您已经声明的JSONArray


(代码测试并返回日期2017-01-26,这是正确的)

我认为您可能正在寻找Double.parseDouble(…)?那么您是否需要遍历整个数组并找到最大的数字,然后返回该日期?是的,这就像遍历整个数组,然后比较股票值并打印出来一样,哪一天是公司的最佳股票价值将
最大的
初始化为第一个,然后逐个迭代,与
最大的
进行比较,并将较大的一个保存在
最大的
(以及它的日期,如果你最终感兴趣的话)。千万不要用双倍来赚钱。使用BigDecimal,或使用整数类型,并以美分(或十分之一美分,或其他任何形式)表示。我认为您可能正在寻找Double.parseDouble(…)?那么您是否需要遍历整个数组并找到最大的数字,然后返回该日期?是的,这就像迭代整个数组,然后比较股票价值并打印出来,在哪个日期是公司的最佳股票价值初始化
最大
成为第一个,然后逐个迭代,与
最大
进行比较,并将较大的股票价值保存在
最大
(还有它的日期,如果你最终感兴趣的话)。千万不要用double来表示钱。使用BigDecimal,或者使用整数类型,用美分(或者十分之一美分,或者其他什么)来表示。非常感谢。我甚至不知道那个数组。get(0)。get(0)是可能的。谢谢!!!@Blnpwr这是可能的。JSON数组的元素是JSON元素。由于JSON元素可以是JSON数组,JSON数组可以包含JSON数组作为其元素。非常感谢。我甚至不知道该数组。get(0)。get(0)是可能的。谢谢!!!@Blnpwr这是可能的。JSON数组的元素是JSON元素。由于JSON元素可以是JSON数组,JSON数组可以包含JSON数组作为其元素。非常感谢,这帮了很多忙。谢谢,这帮了洛蒂的忙。洛蒂还没有测试它,但我要告诉你