2015-09-19 2 views
0

Моя проблема, вероятно, смехотворно проста, и я просто что-то пропустил. Моя программа вылетает из-за нулевого значения ячейки 1 во время ее первой итерации. я немного разбираюсь в себе и реализую на итерации 1, длина массива равна 1, после чего все остальные итерации имеют длину 2. Эта начальная неправильная длина вызывает полный сбой. Есть идеи?Array Length Результат

`import java.util.Scanner; 
import java.io.*; 

/* Takes in all of users personal information, and weather data. Then  proceeds to determine status of day + averages of the data values provided, then reports to user*/ 
public class ClimateSummary 
{ 
public static void main (String [] args) throws FileNotFoundException 
{ 

Scanner sc = new Scanner (new File(args[0])); 
    String name = sc.nextLine(); 
    String birthCity = sc.next(); 
    String birthState = sc.next(); 
    String loc = sc.next(); 
    int birthDay = sc.nextInt(); 
    String birthMonth = sc.next(); 
    int birthYear = sc.nextInt(); 
    int highTemp = 0; 
    double avgTemp; 
    double avgPrecip; 
    int coldDays = 0; 
    int hotDays = 0; 
    int rainyDays = 0; 
    int niceDays = 0; 
    int miserableDays = 0; 
    double totalTemp = 0; 
    double totalPrecip = 0; 


    int i = 0; 
    while(i <= 5) 
    { 
     String storage = sc.nextLine(); 
     String[] inputStorage = storage.split(" "); //couldnt find scanf  equiv in c for java so using array to store multiple values. 
      System.out.println(inputStorage[0]); 
     int tempTemp = Integer.parseInt(inputStorage[0]); 
      double tempPrecip = Double.parseDouble(inputStorage[1]); 

      totalTemp = totalTemp + tempTemp; 
      totalPrecip = totalPrecip + tempPrecip; 

      if(highTemp < tempTemp) 
      { 
       highTemp = tempTemp; 
      } 

      if(tempTemp >= 60.0) 
      { 
       hotDays++; 
      }else{ 
       coldDays++; 
      } 

      if(tempPrecip > 0.1) 
      { 
       rainyDays++; 
      } 

      if(tempTemp >= 60.0 || tempTemp <= 80.0 || tempPrecip == 0.0) 
      { 
       niceDays++; 
      }else if(tempTemp < 32.0 || tempTemp > 90.0 || tempPrecip > 2.0) 
      { 
       miserableDays++;     
      }else{ 

      } 

     i++; 

} 

    avgTemp = totalTemp/5; 
    avgPrecip = totalPrecip/5; 



    System.out.println("Name: " + name); 
    System.out.println("Place of birth: " + birthCity + "," + birthState); 
    System.out.println("Data collected at: " + loc); 
    System.out.println("Date of birth: " + birthMonth + " " + birthDay +", "  + birthYear); 
    System.out.println(""); 
    System.out.println("The highest temperature during this tine was " + highTemp + " degrees Farenheit"); 
    System.out.println("The average temperature was " + avgTemp + " degrees Farenheit"); 
    System.out.println("The average amount of precipitation was " + avgPrecip + " inches"); 
    System.out.println("Number of hots days = " + hotDays); 
    System.out.println("Number of cold days = " + coldDays); 
    System.out.println("Number of rainy days = " + rainyDays); 
    System.out.println("Number of nice days = " + niceDays); 
    System.out.println("Number of miserable days = " + miserableDays); 
    System.out.println("Goodbye and have a nice day!"); 

} 

Эрик Томас Columbus Nebraska Columbus февраля 44 2,2 64 0,06 26 0,5 34 0,02

+0

Предположим, что в вашем файле было только одно слово. Что вы должны делать с этой информацией? – Makoto

+1

Длина массива фиксированного размера, проверьте свою стоимость линии. Кроме того, рассмотрим разделение на '\\ s +', которое будет вырезать непрерывное пространство. –

+0

Не знаю об ошибке, но эта строка должна использовать '&&', а не '||', в противном случае это всегда верно: 'if (tempTemp> = 60.0 && tempTemp <= 80.0 && tempPrecip == 0.0)' – Andreas

ответ

0

Если файл содержит нулевые значения, то вы должны обращаться это отдельно .... с использованием примерно такого:

if (name == null) { 
    //do something 
} 
else { 
    // do something else; 
} 

Хорошее обсуждения по нулям можно увидеть здесь ... How to check for null value in java

Кроме того, после разделения строки, вам нужно проверить, если массив (который является выходным) имеет значение в индексах, которые вы используете ,

Например:

String name = "A/B/C"; 
String[] nameArray = name.split("/"); 

В приведенном выше случае, NameArray [3] выдаст ошибку.

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