user1810925
user1810925

Reputation: 63

Error while running code ( Array Problems )?

I have been having constant problems with my code concerning arrays .

I received a constant string of errors :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at Ass1.genTimeArray(Ass1.java:150) at Ass1.main(Ass1.java:54)

Here's my code :

import java.util.* ;
public class Ass1 {


 static int VIX = 0 ; // Traversing Voltage Component in Component Value Array 
 static int CIX = 1 ; // Traversing Capacitor
 static int LIX = 2; // Traversing Inductor
 static int RIX = 3; // Traversing Resistor

 public static void main (String args[]) { 
  System.out.println(

  double[] compArr  = getCircuitComp() ; 

  System.out.println("-----------------------------------------------------") ;
  System.out.println(""); 
  System.out.println("Voltage Source V = " + compArr[VIX]+ "volts") ; 
  System.out.println("Capacitor C = " + compArr[CIX]+ "farads");
  System.out.println("Inductor L = " + compArr[LIX] + " henrys") ; 
  System.out.println("Resistor R =" + compArr[RIX] + "ohms") ; 
  System.out.println("-----------------------------------------------------") ; 

  boolean outerLoopFlag ; 
  boolean innerLoopFlag ; 
  int i ; 
  int n = 1  ; 
  int qArray[] = new int[n] ; 
  int timeArr[] = new int [n] ;
  System.out.println("-----------------------------------------------------") ;
  Scanner input = new Scanner (System.in) ;
  while ( outerLoopFlag = true) { 

   System.out.println("Reset Component Values (y/n) ?") ; 
   String answer = input.nextLine() ; 
   char ans = answer.charAt(0) ;  
   if ( ans == 'y') { 
     getCircuitComp() ; 

   } 
   else { 
     } 
   innerLoopFlag = true ; 
   while ( innerLoopFlag = true){ 
    System.out.print("Run a simulation?") ; 
      String answer2 = input.nextLine() ; 
   char ans2 = answer2.charAt(0) ;  
    if (ans2 == 'y'){

    System.out.println("Enter a maximum time :") ; 
    double tMax = input.nextDouble(); 
    System.out.println("Enter a time step:") ; 
    double tStep = input.nextDouble();
       timeArr[n]= genTimeArray(tMax,tStep,n);  
       qArray[n] = genQArray( timeArr , n , compArr) ;  
       displayQFunction(timeArr,qArray,n );

    }
    else{
     innerLoopFlag = false ;
    }
    System.out.println("-----------------------------------------------------") ; 

    while (innerLoopFlag = false) { 
     System.out.println("Do you want to quit (y/n)?") ;
     String answer3 = input.nextLine() ; 
     char ans3 = answer3.charAt(0) ; 
     if ( ans3 =='y' ){ 
      System.exit(0); 
      } 
     else{}

    }


   } 



 }

}
     ////////////////////////////
 ///*getCircuitComp Method // 

 public static double[] getCircuitComp() {
     Scanner input = new Scanner (System.in) ; 
  boolean flag = true ; 
  double compArr [] = new double[4]; 
     do{ 
   System.out.println("Enter a value V ( 4 to 15):") ; 
   compArr[VIX] = input.nextDouble() ;  
   if ((compArr[VIX] >= 4.0) && (compArr[VIX] <= 15.0)){ 
    flag = false ; 
   }
   else{ 
    System.out.println("Bad Value" + compArr[VIX] ) ;
   }

  }  while (  flag );
  flag = true  ; 
  while (flag) { 
   System.out.println("Enter a value for R ( 5 to 10) :") ; 
   compArr[RIX] = input.nextDouble();  
   if((compArr[RIX] >= 5.0) && (compArr[RIX] <= 10.0)){
flag = false;
   }
   else{
    System.out.println("Bad Value:"+ compArr[RIX]) ; 

   }

  }
   flag = true ; 
   while(flag) { 
    System.out.println("Enter a value for C( 1e-9 to 1e-7 ): ") ; 
    compArr[CIX] = input.nextDouble();  
    if (( compArr[CIX] >= Math.pow(10, -9)) && (compArr[CIX] <= Math.pow(10, -7))){
     flag = false ; 
    }
    else{ 
     System.out.println("Bad Value :"+ compArr[CIX]);
    }


   }
    flag = true ; 
    while(flag){ 
     System.out.println("Enter a value for L(1e-3 to 1e-1) "); 
     compArr[LIX] = input.nextDouble(); 
     if(compArr[LIX]>= Math.pow(10,-3) && compArr[LIX] <= Math.pow(10, -1)){
      flag = false ; 
     }
     else{ 
      System.out.println("Bad Value :" + compArr[LIX]) ; 

     }
    }
    return compArr  ; 
   }


////////////////////////////
///*getTimeArray Method //  
 public static int genTimeArray( double tMax , double tStep , int n ) { 

   int t[] = new int[n] ;
    n = 1 ; 
    t[0] = 0 ; 
    if(t[n] < tMax){
    t[n] = (int) (t[n-1] + tStep) ; 
    n = n + 1 ; 
    }
   return t[n] ;

  } 
  public static int genQArray( int timeArr[] , int n , double compArr [] ) {
   double q[] = new double[n] ; 
   n = 1 ;  
   double s = (compArr[VIX])*(compArr[CIX]) ; 
   double t = Math.exp((-compArr[RIX])/(2*compArr[LIX])); 
   double c = (1)/((compArr[LIX])*(compArr[CIX])) ; 
   double v = Math.pow((compArr[RIX])/(2*(compArr[LIX])),2) ;
   double r = (timeArr[n])*(Math.sqrt(c-v)) ;
   q[n] = (s)*(t)*(Math.cos(r)) ; 

   return (int) q[n] ; 
  }
////////////////////////////
///*displayQFunction Method // 
  public static void  displayQFunction(int[] timeArr , int[] qArray ,int n  ){ 

  n = 1 ;
  System.out.println( timeArr[n]  + qArray[n]) ; 




 }
 }

Could anyone help , I am having a lot of trouble with this code !

Thanks

Upvotes: 1

Views: 148

Answers (2)

Ben
Ben

Reputation: 57209

java.lang.ArrayIndexOutOfBoundsException: 1

This indicates that you've got an array that is less than 2 elements long.

You're requesting index 1 (the second element), and Java is saying, "hold on cowboy, this here array's not long enough."

Looks like you need to put some more cows in the corral (that is, populate your array). :)


After a closer look, it looks like the problem starts here

boolean outerLoopFlag ; 
boolean innerLoopFlag ; 
int i ; 
int n = 1  ;    //  <- Here's a problem
int qArray[] = new int[n] ; 
int timeArr[] = new int [n] ;  // <- because your array is now only 1 element long

and continues down here

double tStep = input.nextDouble();
timeArr[n]= genTimeArray(tMax,tStep,n);    // <- n is still 1

and continues on to the place where the error happens:

public static int genTimeArray( double tMax , double tStep , int n ) { 
    int t[] = new int[n] ;

Upvotes: 4

poida
poida

Reputation: 3599

What Steve said, array counting in a lot of programming languages has the first element as item 0 in the array. Instead of thinking about it as the '0th' element, it makes sense to me to think about it as going to the start of the array, and then adding 0 for the first, the start plus 1 for the second and so on.

Also, I think you are also using the wrong operator to test for equality in some of your while loops.

The following loop will never execute, maybe try the assignment and initialization at the same time.

// will always be false, the while block will never execute
while (innerLoopFlag = false) {

Upvotes: 1

Related Questions