2016-01-04 3 views
-4

Я создал текстовый файл с 15 случайными плавающими числами, и я пытаюсь создать программу, которая сравнивает их все, начиная с первого и до последнего.
для сравнения и scanner.nextDouble.

Моя проблема в том, что на последних двух номерах он не может их сравнить, потому что теперь есть 16-й номер, поэтому он дает ошибку из-за использования i+1.
Есть ли способ сделать программу остановленной на 15-м номере, чтобы она не выдавала ошибку?Сравнение плавающих чисел из текстового файла

public static void main(String [] args) 
throws IOException 
{ 
int num, countUp, countDown, countSame; 
num = 0; 
countUp = 0; 
countDown = 0; 
countSame = 0; 
FileInputStream stocks = new FileInputStream(args[0]); 
Scanner scanner = new Scanner(stocks); 
ArrayList<Double> stocksList = new ArrayList<Double>(); 
while (scanner.hasNextLine()) 
{ 
    stocksList.add(scanner.nextDouble()); 
} 
//Dilbert's Rule 
for(int i=0;i<stocksList.size(); i++) 
{ 
    num++; 
    System.out.printf(num + "%8.3f",stocksList.get(i)); 
    if(stocksList.get(i+1) > stocksList.get(i)) 
    { 
    countUp++; 
    } 
    else if (stocksList.get(i+1) < stocksList.get(i)) 
    { 
    countDown++; 
    } 
    else 
    { 
    countSame++; 
    } 
    if(countUp >= 3 && (countDown > 1 || countSame >= 1)) 
    { 
    System.out.print(" " + "SELL"); 
    countUp = 0; 
    countSame = 0; 
    } 
    else if (countDown >= 3 && (countUp > 1 || countSame >= 1)) 
    { 
    System.out.print(" " + "BUY"); 
    countDown = 0; 
    countSame = 0; 
    } 
System.out.println(); 
} 
} 

Я сделал несколько серьезных изменений с момента последнего времени, и теперь единственная ошибка, я получаю это IndexOutOfBoundsException.
Плюс Если я, но -1 на цикле for, как многие предложили, он уходит, но я теряю свою 15-ю линию.

ответ

0

Вы делаете stocksList.get(i+1), тогда как в вашем цикле for вы проверяете i<stocksList.size(). Это обязательное для заполнения. IndexOutOfBoundsException.

Для последней итерации цикла, вы будете иметь i значение быть stockList.size()-1 и вы хотите получить доступ к местоположению i+1 которое stockList.size(). Это даст вам исключение.

Вы должны проверить условие i<stocksList.size() - 1 в цикле, чтобы исключение не произошло.

+0

Я знаю, что виноват, спрашиваю, есть ли способ остановить программу на 15-й строчке, чтобы она не выдала ошибку «IndexOutOfBoundsException». Как я уже сказал, 'i

+0

Последний элемент можно получить после цикла for вручную. После цикла for вы можете делать все, что хотите, с помощью последнего элемента, например: 'System.out.println (stockList.get (stockList.size() - 1))'. Или внутри цикла вы можете добавить условие 'if (i == stockList.size() - 1)' и выполнить требуемую операцию во втором последнем и последнем элементе. – Atri

+0

это сработало спасибо. –

Смежные вопросы