这是一些我非常想弄清楚自己的工作所以如果可能的话,请你不要直接给出答案,但也许可以指出我为什么从循环输出接收错误的正确方向为什么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)
任何可能导致这种情况的想法?
答案 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)
对于最后的错误,似乎在for循环结束时下面尝试在每次迭代后读取行:
Unitnum = inFile.nextLine();
Unitnum = inFile.nextLine();
所以要么你的文件末尾应该有2个空行,要么你应该在循环的开头读一行:
while(inFile.hasNextLine()) {
Unitnum = inFile.nextLine();
saleassist = inFile.nextInt();
.......
}
关于“if”块的第二个问题与每次迭代结束时total被设置为0的值有关:
小时= 0; rate = 0; 总计= 0;
您需要在外部循环外声明的其他变量,以保持循环之间的总和。
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");