所以我试图获得一个读取文件的程序,文件的长度为第一行。然后找到文件中最小值和最大值的索引。令人讨厌的是,由于某种原因,我的findMin和findMax方法无法正常工作。好像他们绕过了for循环。我确定我只是犯了一个愚蠢的错误,但我似乎无法确定它。
import java.io.File;
import java.util.Scanner;
public class Driver00 {
public static int minpos;
public static int maxpos;
public static double min;
public static double max;
public static int numitems;
public static void main(String[] args) throws Exception {
Scanner infile = new Scanner(new File("data.txt"));
int numitems = infile.nextInt();
double[] array = new double[numitems];
for (int k = 0; k < numitems; k++) {
array[k] = infile.nextDouble();
}
infile.close();
int minPos, maxPos;
minPos = findMin(array);
maxPos = findMax(array);
System.out.println("Minimum value: " + minPos);
System.out.println("Maximum value: " + maxPos);
}
private static int findMin(double[] apple) {
for (int x = 0; x < numitems; x++)
// not activating
if (x == 1) {
if (apple[x] < apple[x - 1]) {
min = apple[x];
minpos = x;
} else {
min = apple[x - 1];
minpos = x - 1;
}
} else {
if (apple[x] < min) {
min = apple[x];
minpos = x;
}
}
return minpos;
}
private static int findMax(double[] banana) {
for (int x = 0; x < numitems; x++)
// not activating
if (x == 1) {
if (banana[x] > banana[x - 1]) {
max = banana[x];
maxpos = x;
} else {
max = banana[x - 1];
maxpos = x - 1;
}
} else {
if (banana[x] > max) {
max = banana[x];
maxpos = x;
}
}
return maxpos;
}
}
答案 0 :(得分:2)
public static int numitems;
是ZERO
,这就是为什么你的for循环没有被执行
为什么numitems ZERO?
因为您在int numitems = infile.nextInt();
语句处获得的整数将被分配给方法本地numitems
变量而不是实例变量。
答案 1 :(得分:1)
这一行:
int numitems = infile.nextInt();
声明一个新的 local 变量,该变量隐藏静态字段并改为更改。因此,字段numitems永远不会分配任何内容并保持为0 将其更改为
numitems = infile.nextInt();
答案 2 :(得分:1)
当你声明int numitems = infile.nextInt();你正在写你的全局静态变量。
此外,此代码可能不会因其他原因而起作用。 1:
for(int x = 0; x < numitems; x++) //not activating
if (x==1){
if (apple[x] < apple[x-1]){
min = apple[x];
minpos = x;
}
else{
min = apple[x-1];
minpos = x-1;
}
}
else{
if (apple[x] < min){
min = apple[x];
minpos = x;
}
}
这是一个烂摊子,可能会破坏,因为for循环从0开始,而不是1,而min尚未实例化;更容易的是:
if(numitems<=0)
return 0; //In case there isn't actually a value in your list.
minpos=0;
min=apple[0]
for(int x=1;x<numitems;x++)
{
if (apple[x] < min)
{
min = apple[x];
minpos = x;
}
}
对maxpos进行相应的更改。