#java #arrays #for-loop #stock
#java #массивы #for-цикл #акции
Вопрос:
Это мое решение для определения максимальной прибыли, которую я могу получить от акций.
int[] aktiePris = новый int[]{10, 7, 5, 8, 11, 9}; это массив, в котором индекс находится через несколько минут после открытия фондового рынка, а значения представляют собой цену акции.
Так, например, aktiePris [60] = 300 означает, что стоимость акции равна 300, через час после открытия фондового рынка.
Прямо сейчас мой код возвращает максимально возможную прибыль, которую я могу получить от покупки и продажи одной акции. Я хочу иметь возможность видеть более одной акции. Как я могу найти все возможные прибыли и распечатать их?
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class ProfitCalculator {
static int minValue, maxValue, maxDiff;
static Calendar timeMin, timeMax;
static int indeksMinMinut, indeksMaxMinut;
public static void main(String args[]) {
int[] aktiePris = new int[]{10, 7, 5, 8, 11, 9};
int profit = findProfit(aktiePris);
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
timeMin = findTime();
timeMin.add(timeMin.MINUTE, indeksMinMinut);
timeMax = findTime();
timeMax.add(timeMax.MINUTE, indeksMaxMinut);
System.out.println("Best time amp; price for buying is " timeFormat.format(timeMin.getTime()) " for " minValue " EUR." "n"
"Best time amp; price for selling is " timeFormat.format(timeMax.getTime()) " for " maxValue " EUR." "n"
"Profit: " profit);
}
public static int findProfit(int[] inputArray) {
if (inputArray.length < 1)
return 0;
maxDiff = 0;
minValue = inputArray[0];
maxValue = minValue;
for (int i = 1; i < inputArray.length; i ) {
if (inputArray[i] > maxValue) {
maxValue = inputArray[i];
indeksMaxMinut = i;
int priceDiff = maxValue - minValue;
if (priceDiff > maxDiff) {
maxDiff = priceDiff;
}
} else if (inputArray[i] < minValue) {
minValue = maxValue = inputArray[i];
indeksMinMinut = i;
}
}
return maxDiff;
}
public static Calendar findTime() {
Calendar calendar = Calendar.getInstance();
calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 30);
return calendar;
}
}
Ответ №1:
Создайте класс анализатора общего доступа, который инкапсулирует нужную вам функциональность:
class ShareAnalyzer {
private final int[] aktiePris;
private int sellMinut = 0, buyMinut = 0, buyPrice, sellPrice;
ShareAnalyzer(int[] aktiePris) {
this.aktiePris = aktiePris;
findProfit();
}
private void findProfit() {
if (aktiePris.length < 1) return ;
int minValue = aktiePris[0];
int maxValue = minValue;
int indeksMaxMinut = 0, indeksMinMinut = 0;
for (int i = 1; i < aktiePris.length; i ) {
if (aktiePris[i] > maxValue) {
maxValue = aktiePris[i];
indeksMaxMinut = i;
int priceDiff = maxValue - minValue;
if (priceDiff > getProfit()) {
sellPrice = maxValue;
buyPrice = minValue;
sellMinut = indeksMaxMinut;
buyMinut = indeksMinMinut;
}
} else if (aktiePris[i] < minValue) {
minValue = maxValue = aktiePris[i];
indeksMinMinut = i;
}
}
}
//time in minutes from opening
int getSellTime() {return sellMinut;}
int getSellPrice() {return sellPrice;}
//time in minutes from opening
int getBuyTime() {return buyMinut; }
int getBuyPrice() {return buyPrice;}
int getProfit() { return sellPrice - buyPrice; }
}
Вы также могли бы добавить метод для распечатки информации share analyzer:
//this could be implemented as `toString` of ShareAnalyzer
private static void printShareInfo(ShareAnalyzer shareAnalyzer){
System.out.println("Best time amp; price for buying is " shareAnalyzer.getBuyTime() " minutes after opening for " shareAnalyzer.getBuyPrice() " EUR." "n"
"Best time amp; price for selling is " shareAnalyzer.getSellTime() " minutes after opening for " shareAnalyzer.getSellPrice() " EUR." "n"
"Profit: " shareAnalyzer.getProfit());
}
Создайте новый ShareAnalyzer
экземпляр для каждой акции, которую вы хотите проанализировать.
public static void main(String args[]) {
int[] aktiePris1 = new int[]{10, 7, 5, 8, 11, 9};
ShareAnalyzer shareAnalyzer1 = new ShareAnalyzer(aktiePris1);
printShareInfo(shareAnalyzer1);
int[] aktiePris2 = new int[]{2, 12, 4, 7 , 11, 9, 1 , 8};
ShareAnalyzer shareAnalyzer2 = new ShareAnalyzer(aktiePris2);
printShareInfo(shareAnalyzer2);
}
Вы можете запустить код и протестировать его, используя эту ссылку
Комментарии:
1. Но это все равно возвращает только одну максимальную прибыль (на массив)… Я хочу видеть всю прибыль, которую я могу получить от aktiePris1..
2. Извините, но это не то, что вы спросили: «Я хочу иметь возможность видеть более одной акции». Я думаю, что мой ответ отвечает на это. По другим вопросам, пожалуйста, разместите новый пост.
3. Хорошо.. В любом случае, спасибо.
4. Или вы могли бы спросить и помочь OP улучшить вопрос, чтобы мы не перегружались подобными вопросами.