对于循环错误 - >如果声明没有产生输出

时间:2013-11-26 17:22:03

标签: java loops if-statement

这是一些我非常想弄清楚自己的工作所以如果可能的话,请你不要直接给出答案,但也许可以指出我为什么从循环输出接收错误的正确方向为什么IF语句没有产生输出。

我必须允许用户输入“推荐的最高员工工资”#39;然后从不同商店单位的文件中读取文本,计算出每个商店单位的员工工资和员工总成本。

以下是我必须阅读的文字

Unit One
4
32 8
38 6
38 6
16 7

Unit Two
0

Unit Three
2
36 7
36 7

Unit Four
6
32 6.5
32 6.5
36 6.5
36 6.5
38 6.5
38 6.5

...continued up to 9 shop units.

这是我的代码:

public class Recursion {

    public static void main(String[] args) {
            // TODO Auto-generated method stub
            int count =0;
            int n = 1;
            int t=0;
            int triangularNumber =0;
            while (n<Integer.MAX_VALUE)
            {
                    t = isTriangularNumber(n,count,triangularNumber);  
                    triangularNumber=0;
                    int starNumber= ((6*n)*(n-1)) + 1;
                    if (starNumber ==t)
                    {
                            System.out.println(t);
                    }
                    n++;
            }      
            if (n==Integer.MAX_VALUE)
            {
                System.exit(0);
            }
    }


    public static int isTriangularNumber(int n, int count, int triangularNumber)
    {
            triangularNumber =triangularNumber + (n-(n-count));
            if (count<=n)
            {      
                    return isTriangularNumber(n,(count++), triangularNumber);
            }      
            else return triangularNumber;
    }

} 商店单位的打印输出很好,但输出后会产生错误,if语句的输出也不会出现,如下所示:

Please enter the recommended maximum staff cost: 
900
You entered: 900.0
256.0
484.0
712.0
824.0
The total staff cost of Unit One is £824.0
The total staff cost of Unit Two is £0.0
252.0
504.0
The total staff cost of Unit Three is £504.0
208.0
416.0
650.0
884.0
1131.0
1378.0
The total staff cost of Unit Four is £1378.0
208.0
464.0
688.0
944.0
The total staff cost of Unit Five is £944.0
266.0
461.0
653.0
845.0
1037.0
The total staff cost of Unit Six is £1037.0
The total staff cost of Unit Seven is £0.0
480.0
The total staff cost of Unit Eight is £480.0
192.0
348.0
543.0
711.0
935.0
The total staff cost of Unit Nine is £935.0
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at TEST.main(TEST.java:48)

任何可能导致这种情况的想法?

5 个答案:

答案 0 :(得分:1)

以下几行给出了错误:

Unitnum = inFile.nextLine();
Unitnum = inFile.nextLine();

你可以将它们包装成:

if (b < shopunits - 1) {
    ...
}

答案 1 :(得分:1)

您已到达文件的末尾,并且扫描程序尝试在文件末尾读取导致此问题的nextLine。

答案 2 :(得分:1)

Adarsh说的最有可能是正确的,你应该做的是将它包裹在一个while循环中。

while(infile.hasNextLine()){
    ...
}

这样当它到达终点时它就不会失败。 我经历了编辑你的格式代码,起初很难理解。我认为if块的问题是没有括号。

试试这个:

if(total > recommended_max){
    System.out.println("Higher");
}else{
    System.out.println("Lower");
}

我知道它有时没有括号,但有时取决于它的编写方式和位置。所以穿上它总是好的。

答案 3 :(得分:0)

if语句的输出未到来的原因是语句在循环之外。正确格式化代码应该可以帮助您更早地识别此类错误。

结束for (int b = 0; b <shopunits; b++)循环的大括号与total = 0;位于同一行,即之前的 if语句。这就是循环期间未达到条件的原因。

另一个问题是,在处理完当前商店后,您的代码会消耗商店之间的新行。只要有下一个商店,这就有效;然而,一旦你到达最后一家商店,这就会中断。

要解决此问题,请在使用新行之前添加检查,如下所示:

if (!inFile.hasNextLine()) break;
Unitnum = inFile.nextLine();
if (!inFile.hasNextLine()) break;
Unitnum = inFile.nextLine();

或者,您可以使用单个nextLine()保护当前if次读取的块,如下所示:

if (b != shopunits-1) {
    // Skip lines only if we haven't reached the last block
    Unitnum = inFile.nextLine();
    Unitnum = inFile.nextLine();
}

在循环中移动if语句并修复此问题后,您的程序应该正常运行。

答案 4 :(得分:0)

  1. 对于最后的错误,似乎在for循环结束时下面尝试在每次迭代后读取行:

    Unitnum = inFile.nextLine();
    Unitnum = inFile.nextLine();

  2. 所以要么你的文件末尾应该有2个空行,要么你应该在循环的开头读一行:

    while(inFile.hasNextLine()) {
        Unitnum = inFile.nextLine();
        saleassist = inFile.nextInt();
      .......
    }
    
    1. 关于“if”块的第二个问题与每次迭代结束时total被设置为0的值有关:

      小时= 0; rate = 0; 总计= 0;

    2. 您需要在外部循环外声明的其他变量,以保持循环之间的总和。

      double sumOfTotal=0;
      ......
      System.out.println("The total staff cost of " + Unitnum +" is £"+ total);
      //this holds the sum of totals across loops
      sumOfTotal += total;
      ......
      total=0;
      }
      if (sumOfTotal > reccomended_max)
          System.out.println("Higher");
      else
          System.out.println("Lower");