В настоящее время я пишу программу java, чтобы узнать, в какой день был создан молоток или другой образец подсвечника. Пользователь должен ввести 2 даты в качестве аргументов при выполнении программы, например. java ReadingTest 2016-09-03 2016-10-31, и программа будет искать шаблон молотка с 2016-09-03 по 2016-10-31. код выглядит следующим образом:Дата составления в if-заявлении и показ только результатов в оговоренном интервале времени
import java.io.*;
import java.util.*;
import java.text.*;
public class ReadingTest
{
public static void main(String[] args) throws IOException,ParseException
{
//Import file to java
File file = new file("table.csv");
//Read the file
Scanner infile = new Scanner(file);
//Skip the first line in table.csv
infile.nextLine();
//Define format of date
SImpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//Name the variables user enters
Date start = sdf.parse(args[0]);
Date end = sdf.parse(args[1]);
//Create ArrayList for each column of data
ArrayList<String> date = new ArrayList<String>();
ArrayList<Double> open = new ArrayList<Double>();
ArrayList<Double> high = new ArrayList<Double>();
ArrayList<Double> low = new ArrayList<Double>();
ArrayList<Double> close = new ArrayList<Double>();
while (infile.hasNext())
{
//Tokenize columns by comma
String[] data = infile.nextLine().split(",");
//Organize each column of data to one index of data array
date.add(data[0]);
open.add(Double.parseDouble(data[1]));
high.add(Double.parseDouble(data[2]));
low.add(Double.parseDouble(data[3]));
close.add(Double.parseDouble(data[4]));
}
//Show options and ask user to choose
System.out.println("1. Hammer");
System.out.println("2. Three white soldiers");
System.out.println("3. Bullish kicker");
//Record user input and execute corresponding code
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
if (choice == 1)
for (int i = 0; i < date.size(); i++)
if (close.get(i) > open.get(i) &&
close.get(i) > ((high.get(i)) + (low.get(i)))/2 &&
((close.get(i) - low.get(i))/2 > (high.get(i) - close.get(i)))
System.out.println("Pattern found: " + date.get(i));
}
}
Код отлично работает до здесь. Однако вывод в последней строке кода находится в формате dd/MM/yyyy, и я попытался использовать sdf.parse (date.get (i)) вместо date.get (i), чтобы показать результаты в yyyy-MM -dd. Выполнение кода с sdf.parse (date.get (I)) возвращает следующее сообщение об ошибке:
Exception in thread "main" java.text.ParseException: Unparseable date:
"25/10/2016" at
java.text.DateFormat.parse(Unknown source) at ReadingTest.main(ReadingTest.java:59)
Я также попытался показать только даты показал образец молотка, используя
(date.get(i).after(start) && date.get(i).before(end))
и результаты в
error: cannot find symbol
symbol: method before(Date)
location: class String
И файл CSV выглядит следующим образом:
Date Open High Low Close
31/10/2016 58.25 58.65 58.2 58.35
28/10/2016 58.95 59 58.3 58.35
.
.
.
1/8/2016 50.8 51.1 50.75 50.8
Как изменить код, чтобы заставить его работать?
Ваш код не компилируется из-за некоторой базовой опечатки (т. Е. Отсутствующей скобки в начале основной функции). Попробуйте в следующий раз дать правильный пример кода. – BaptisteL
Кстати, вы используете старые классы времени, теперь устаревшие, вытесненные классами java.time. –