This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
-------- Original Message -------- Subject: Re: 20010711: Netcdf Java problem Date: Wed, 11 Jul 2001 10:30:59 -0600 From: Russ Rew <address@hidden> Organization: UCAR Unidata Program To: "Michael P Duff" <address@hidden> CC: address@hidden, address@hidden >To: address@hidden >From: "Michael P Duff" <address@hidden> >Subject: Netcdf Java problem >Organization: UCAR/Unidata >Keywords: 200107111340.f6BDeO122826 Hi Mike, > Hi. I am having a problem with the NetCDF Java version 2. I am reading > data from an existing NetCDF file using the read() function to place the> data into an Array. The data is stored as a double in the Netcdf file. I
> then use the IndexIterator to step through the Array. I get a compile > error. I am using the code I found in the API for the Interface > IndexIterator, the "Replace array with its square" example. The program > works if I just print the values instead of put them into a variable. I > have below my code, my compile error and the "Replace array with its > square" example. I would appreciate any help you can give me. > > Thank you, > > Mike> ------------------------------------------------------------------------------------------------------------------------------
> // My code that gets a compile error
> import ucar.ma2.*;
> import ucar.nc2.*;
> import java.io.*;
> import java.util.*;
>
> public class ncproblem {
>
> public static void main(String[] args) {
> try {
> NetcdfFile nc = new NetcdfFile(args[0]);
> System.out.println(nc);
> Variable heightVar = nc.findVariable("height");
> System.out.println(heightVar);
> int[] origin = new int[4];
> origin[0] = 45000;
> int[] shape = new int[4];
> shape[0] = 50;
> for (int i = 1; i<4; i+=1){
> origin[i] = 1;
> shape[i] = 1;
> }
> Array hgtVals = heightVar.read(origin,shape);
> IndexIterator iter = hgtVals.getIndexIterator();
> while(iter.hasNext()) {
> for(int i=0; i<50; i+=1) {
> Double val = iter.getDoubleNext();
> System.out.println(val + ",");
> }
> }
> }catch (java.io.IOException e) {
> e.printStackTrace();
> }
> }
> }
>
------------------------------------------------------------------------------------------------------------------------------
> The compile error is: > incompatible types > found : double > required: java.lang.Double > Double val = iter.getDoubleNext(); > ^ > 1 error> ------------------------------------------------------------------------------------------------------------------------------
Since IndexIterator.getDoubleNext() returns double rather than Double, you need to change this statement to: double val = iter.getDoubleNext(); After that, you'll get another compile error because the read() method can generate an InvalidRangeException, which is not a java.io.IOException:ncproblem.java:23: unreported exception ucar.ma2.InvalidRangeException; must be caught or declared to be thrown
Array hgtVals = heightVar.read(origin,shape);
^
One (crude) way to handle this would be to change your catch statement to:
}catch (Exception e) {
--Russ