在我的驱动程序方法中:尽管在Storm.java文件中明确声明了setDuration,setWind,setPressure,NewStorm,getCategory,但找不到它们。我不能提及他们中的任何一个。
import java.io.*;
import java.util.Scanner;
public class StormChaser {
public static void main(String[] args)
{
// Constants
final int MAX_STORMS = 200;
Storm[] List = new Storm[MAX_STORMS]; // array of Storms
Storm CurrentStorm; // storm returned by GetStorm
int NStorms = 0; // number in array List
int Total = 0; // total number of storms in the input file
Scanner fileInput;
// Openning hurricane data file
try{
System.out.println("Openning hurricane data file...");
fileInput = new Scanner(new File("hurricane.data"));
}
catch(FileNotFoundException e){
System.err.println("FileNotFoundException: " + e.getMessage());
return;
}
System.out.println( "File opened successfully...");
System.out.println( "Reading file..." );
// Read Storm data from file until EOF
while( fileInput.hasNextLine())
{
CurrentStorm = GetStorm(fileInput);
++Total;
if( CurrentStorm.getCategory() >= 3 )
{
List[NStorms++] = CurrentStorm;
}
}
System.out.println( "Number of storms: " + Total);
System.out.println( "Hurricanes with category 3 and above: " + NStorms );
DisplayStorms( "First Ten Storms", List, 10 );
Sort( List, NStorms );
DisplayStorms( "Top Ten Storms", List, 10 );
fileInput.close();
}
public static Storm GetStorm( Scanner in )
{
// Build a Storm object and return it
int year = 0, month = 0, day = 0, hour = 0, sequence = 0, wind = 0, pressure
= 0;
String name = new String();
double junk = 0.0;
int current = 0, beginDate = 0, duration = 0;
Storm NewStorm;
// Check for end of file
if( !in.hasNextLine() )
{
NewStorm = new Storm(beginDate, duration, name, wind, pressure);
return NewStorm;
}
// Read next record.
year = in.nextInt();
month = in.nextInt();
day = in.nextInt();
hour = in.nextInt();
sequence = in.nextInt();
name = in.next();
junk = in.nextDouble();
junk = in.nextDouble();
wind = in.nextInt();
pressure = in.nextInt();
// Make a storm object and initialize it with info from the current
record
beginDate = year * 10000 + month * 100 + day;
NewStorm = new Storm(beginDate, duration, name, wind, pressure);
current = sequence;
while( in.hasNextLine() && current == sequence)
{
//update storm info
duration += 6;
NewStorm.setDuration(duration);
NewStorm.SetWind(wind);
NewStorm.setPressure(pressure);
//get next record
}
// and return the new storm object
return NewStorm;
}
public static void DisplayStorms( String title, Storm[] List, int NStorms )
{
// display NStorms storms
// print some title and column headings
System.out.println(title + "\n");
System.out.println("Begin Date Duration Name Category Maximum
Minimum");
System.out.println(" (hours) Winds (mph)
Press. (mb)");
System.out.println("----------------------------------------------------
----
--------");
for( int k = 0; k < NStorms; k++ )
System.out.println(List[k].toString());
System.out.println ("\n");
}
public static void Sort( Storm[] StormList, int N )
{
// bubble sort the list of Storms
int pass = 0, k, switches;
Storm temp;
switches = 1;
while( switches != 0 )
{
switches = 0;
pass++;
for( k = 0; k < N - pass; k++ )
{
if( StormList[k].getCategory() < StormList[k+1].getCategory() )
{
temp = StormList[k];
StormList[k] = StormList[k+1];
StormList[k+1] = temp;
switches = 1;
}
}
}
}
}
这是Storm.java。
public class Storm {
private final double KnotsToMPH = 1.15;
// global user-defined types:
private int beginDate = 0;
private int duration = 0;
private String name;
private int category = 0;
private int wind = 0;
private int pressure = 0;
public Storm( int bdate, int dur, String sname, int w, int p )
{
beginDate = bdate;
setDuration(dur);
name = sname;
wind = 0;
pressure = 0;
setWind(w);
setPressure(p);
}
public void setDuration( int d )
{
duration = d;
}
public void setWind( int w )
{
double temp = 0.0;
temp = KnotsToMPH * w;
if(temp > wind)
wind = (int)temp;
SaffirSimpson();
}
public void setPressure( int p )
{
if(pressure == 0)
pressure = p;
if(pressure > p && p != 0)
pressure = p;
SaffirSimpson();
}
public void SaffirSimpson()
{
// Compute storm category, using the Saffir-Simpson scale
if(pressure <= 920 && wind >= 156)
{
category = 5; // Category 5
}
if(pressure > 920 && wind < 156)
{
category = 4; // Category 4
}
if(pressure > 945 && wind < 113)
{
category = 3; // Category 3
}
if(pressure > 965 && wind < 96)
{
category = 2; // Category 2
}
if(pressure > 980 && wind < 83)
{
category = 1; // Category 1
}
if(wind < 64)
{
category = -1; // Tropical Storm
}
if(wind < 34)
{
category = -2; // Tropical Depression
}
if(pressure == 0)
{
category = 0; // Missing pressure
}
}
public int getCategory()
{
return category;
}
public String toString()
{
return String.format("%9d %8d %10s %4d %9d %10d\n", beginDate,
duration,
name, category, wind, pressure);
}
}
我很确定它与NetBeans创建的默认构造函数有关,但我不确定那个确切的问题在哪里。
最佳答案
Java区分大小写,SetWind
与setWind
不同Storm
中的方法定义为setWind
public static class Storm {
//...
public void setWind(int w) {
//...
}
//...
}
但是您在代码
SetWind
中使用NewStorm.SetWind(wind);