Как мне получить многократную прибыль от акций?

#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 улучшить вопрос, чтобы мы не перегружались подобными вопросами.