如果一种作物只种植一次,土壤的肥力就会减少30。种植后,如果土地自由种植一个月,肥力增加2倍,如果肥力达到0时,作物将无法进一步种植。编写一个jAVA程序,以获得初始肥力,获得土地在每次种植后空闲的月数,并在肥力变为0之前找到作物成功种植的次数。注1:如果生育力在作物生长过程中变为0,作物就停止生长。注2:如果生育率为0,则停止获取输入。
输入格式:第一输入是一个与土壤初始肥力相对应的整数。接下来的投入是每个月的数量,每次耕种后,土地都是免费的。
输出格式:作物成功种植的次数。
样本输入0
35
3.
1
样本输出0
2
我的代码
class Soil{
int initial_fert, ncultivations;
Soil(){
Scanner sc = new Scanner(System.in);
initial_fert = sc.nextInt();
}
int countCultivations(){
Scanner sc = new Scanner(System.in);
int no;
ncultivations = 0;
while(true){
initial_fert = initial_fert - 30; //35->5 40->10 20->-10
if(initial_fert <= 0) break; //no no yes
no = sc.nextInt(); //3 1
for(int i=0; i<no; ++i)
initial_fert = initial_fert * 2;
++ncultivations;
}
return ncultivations;
}
}
public class Solution {
public static void main(String[] args) {
Soil s = new Soil();
System.out.println(s.countCultivations());
}
}
发布于 2021-02-28 15:38:30
您的while循环在两次迭代后不会停止,因此,当没有更多的数据可供使用时,它会要求另一个“空闲的月”,从而导致异常。
调试您的代码--写下来,如果您愿意的话,写在纸上,您认为您的代码会做什么(所以,写下initial_fert
是什么,no
是什么,initial_fert
在下一个循环中将是什么,等等)。你差不多已经在评论中这样做了:你希望它会变成35 /5/ 40 / 10 / 20 / -10。太好了-那就去看看。使用调试器,如果必须使用,则添加System.out
语句。一旦您确定您的代码正在执行您希望它做的事情,然后,并且只有在然后将它提交给自动检查器。
如果您无法真正执行这段java代码,而自动检查器是您所拥有的全部,那么就修复它。在您的机器上安装java和一个合适的编辑器来编辑它。或者解决你从现在开始的每一个家庭作业问题,所以做你的调试器,我不认为这会很好。
https://stackoverflow.com/questions/66410720
复制相似问题