This repository has been archived on 2026-03-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
CSE-122/Stonks.java
2026-03-18 00:39:22 -07:00

170 lines
6.4 KiB
Java

// Nik Johnson
// 1-25-2024
// TA: Andy Ruan
// modified attempt for resubmission 1
import java.util.*;
import java.io.*;
// stock simulator
// stock market sandbox which reads fake market data from "stonks.tsv", and allows users to:
// buy and sell stocks, and save their portfolio to a file.
// upon quitting, the value of the users portfolio will be calculated and printed.
public class Stonks {
public static final String STOCKS_FILE_NAME = "stonks.tsv";
public static void main(String[] args) throws FileNotFoundException {
Scanner console = new Scanner(System.in);
File stonks = new File(STOCKS_FILE_NAME);
Scanner stonklines = new Scanner(stonks);
int numStocks = Integer.parseInt(stonklines.nextLine());
String[] tickers = new String[numStocks];
Double[] prices = new Double[numStocks];
Double[] portfolio = new Double[numStocks];
// fill portfolio with zeros to prevent null exceptions
// without using Arrays.fill()
for (int n = 0; n < numStocks; n++) {
portfolio[n] = 0.0;
}
String info = stonklines.nextLine();
// this runs once.
// functionally decomposing it would add lines of code, but no functionality.
int index = 0;
while (stonklines.hasNextLine()) {
String nextline = stonklines.nextLine();
Scanner token = new Scanner(nextline);
tickers[index] = token.next();
prices[index] = token.nextDouble();
index++;
}
System.out.println("Welcome to the CSE 122 Stocks Simulator!");
System.out.println("There are " + numStocks + " stocks on the market:");
for (int i = 0; i < numStocks; i++) {
System.out.println(tickers[i] + ": " + prices[i]);
}
System.out.println();
String next = navigator(console);
while (!next.equals("quit")) {
if (next.equals("buy")) {
portfolio = buy(console, tickers, prices, portfolio);
} else if (next.equals("sell")) {
portfolio = sell(console, tickers, prices, portfolio);
} else if (next.equals("save")) {
save(console, tickers, portfolio);
} else {
System.out.println("Invalid choice: " + next);
System.out.println("Please try again");
System.out.println();
}
next = navigator(console);
}
Double value = quit(prices, portfolio);
System.out.println("Your portfolio is currently valued at: $" + value);
}
// menu method, called for inital prompt and then after using any other methods
// returns String which decides which function to use
public static String navigator(Scanner console) {
System.out.println("Menu: buy, sell, save, quit");
System.out.print("Enter your choice: ");
String destination = console.next();
return destination;
}
// add (buy) to portfolio according to user input, no lower than $5.0
// takes console scanner, and all data arrays defined in main lines 24-26
// return modified portfolio with MORE shares than before
public static Double[] buy(Scanner console, String[] tickers,
Double[] prices, Double[] portfolio) {
System.out.print("Enter the stock ticker: ");
String order = console.next();
System.out.print("Enter your budget: ");
Double budget = console.nextDouble();
if (budget >= 5.0) {
for (int i = 0; i < tickers.length; i++) {
if (order.equals(tickers[i])) {
portfolio[i] += (budget / prices[i]);
System.out.println("You successfully bought " + tickers[i] + ".");
System.out.println();
}
}
} else {
System.out.println("Budget must be at least $5");
System.out.println();
}
return portfolio;
}
// subtract (sell) from portfolio according to user input, if they have enough to sell
// takes console scanner, and all data arrays defined in main lines 24-26
// return modified portfolio with LESS shares than before
public static Double[] sell(Scanner console, String[] tickers,
Double[] prices, Double[] portfolio) {
System.out.print("Enter the stock ticker: ");
String ticker = console.next();
System.out.print("Enter the number of shares to sell: ");
Double sellAmount = console.nextDouble();
for (int i = 0; i < tickers.length; i++) {
if (ticker.equals(tickers[i])) {
if (sellAmount > portfolio[i]) {
System.out.println("You do not have enough shares of " + ticker + " to sell " + sellAmount + " shares.");
System.out.println();
} else if (sellAmount <= portfolio[i]) {
portfolio[i] = portfolio[i] - sellAmount;
System.out.println("You successfully sold " + sellAmount + " shares of " + ticker + ".");
System.out.println();
}
}
}
return portfolio;
}
// write current portfolio to file named according to user input
// takes console scanner, array of tickers and the users current portfolio
public static void save(Scanner console, String[] tickers, Double[] portfolio) throws FileNotFoundException {
System.out.print("Enter new portfolio file name: ");
String fileName = console.next();
System.out.println();
File saveData = new File(fileName);
PrintStream savePortfolio = new PrintStream(saveData);
for (int i = 0; i < tickers.length; i++) {
if (portfolio[i] != 0.0) {
savePortfolio.println(tickers[i] + " " + portfolio[i]);
}
}
}
// upon quitting, calculate total portfolio value using-
// -values in portfolio and current market prices
// return total value for printing
public static double quit(Double[] prices, Double[] portfolio) {
System.out.println();
Double portfolioValue = 0.0;
for (int i = 0; i < prices.length; i++) {
if (portfolio[i] != null) {
Double currValue = prices[i]*portfolio[i];
portfolioValue += currValue;
} else portfolioValue += 0;
}
return portfolioValue;
}
}