【问题标题】:For Loops not activatingFor 循环未激活
【发布时间】:2012-08-28 19:32:31
【问题描述】:

所以我正在尝试获取一个读取文件的程序,文件的长度作为第一行。然后在文件中找到最小值和最大值的索引。烦人的是,由于某种原因,我的 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;
    }
}

【问题讨论】:

  • 我想知道为什么在这里投反对票?
  • 有时不能很好地容忍愚蠢的错误。但是你是对的,这是一个愚蠢的新手错误,并不表示,例如,未能阅读错误消息或未能进行最小的谷歌搜索以寻找答案。 (如果您认为投反对票不公平,您可以投赞成票。)

标签: java for-loop indexing


【解决方案1】:

public static int numitems;ZERO 这就是为什么你的 for 循环没有被执行

为什么 numitems 为零?

因为您在int numitems = infile.nextInt(); 语句中获得的整数将被分配给方法本地numitems 变量而不是实例变量。

【讨论】:

  • 澄清一下——你声明了两次——一次是静态类成员,一次是main中的局部变量
  • @DanMatthews-Grout:我正在输入你评论的信息。
【解决方案2】:

这一行:

 int numitems = infile.nextInt();

声明一个新的 local 变量,它隐藏了静态字段并改为进行更改。因此,字段 numitems 永远不会分配任何内容并保持为 0。
将其更改为

 numitems = infile.nextInt();

【讨论】:

  • @DanMatthews-Grout:我不知道,但这是另一个问题的主题。
  • @DanMatthews-Grout -- 他可能声明了很多静态的东西,这样他就不必创建和管理对象实例。对于一个“玩具”程序来说,这并不是非常不合理。
【解决方案3】:

当你声明 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 进行相应的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多