比较Java数组中的股票价值
我设法在Eclipse中用JSON打印了这个网站 如你所见,我们有一个数组,其中包含某家公司的股票价值。该数组的长度为22。例如:比较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
["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
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
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数组作为其元素。非常感谢,这帮了很多忙。谢谢,这帮了洛蒂的忙。洛蒂还没有测试它,但我要告诉你