我正在编写一个使用一系列数字输入的程序。使用递归和数组我试图添加所有输入的可被3整除的数字并将它们加在一起。防爆。 3 4 5 6 输出应为9.我的当前输出不断给出3作为我的输入的输出。有任何帮助或建议吗?
import java.io.*;
import java.text.*;
public class Assignment9 {
public static void main (String args[]) throws IOException{
int i = 0;
int [] nums;
nums = new int [100];
InputStreamReader inRead = new InputStreamReader(System.in);
BufferedReader buffRead = new BufferedReader(inRead);
String line = buffRead.readLine();
try {
while (line.equals("0") == false && i<100) {
i++;
line = buffRead.readLine();
nums[i]=(int) Double.parseDouble(line);
}
} catch(IOException e) {
System.out.println("Array index out of bound");
}
int endIndex = computeSumDivisibleBy3(nums, 0, nums.length-1);
System.out.print ("The minimum number is " + min + ('\n'));
System.out.print ("The sum of the numbers divisible by 3 is " + endIndex + ('\n'));
}
}
public static int computeSumDivisibleBy3(int [] numbers, int startIndex, int endIndex) {
if(startIndex == endIndex) {
if(numbers[endIndex] %3 == 0){
return (int) numbers[endIndex];
} else {
return 0;
}
} else {
if(numbers[endIndex] %3 == 0) {
return (int) (computeSumDivisibleBy3(numbers, startIndex, endIndex - 1) + numbers
}
else {
return computeSumDivisibleBy3(numbers, startIndex, endIndex - 1);
}
}
}
答案 0 :(得分:1)
这里有一些事情:
1)如果出现以下情况,则数字n可被3整除:n%3 == 0
而非n%3 == 1
2)当你检查一个数字是否可以被3整除时,你正在检查INDEX是否可以被3整除,而不是数组中的实际数字(使用数字[endIndex])
对这两件事情进行排序,它应该有效。这看起来像是家庭作业,所以我很谨慎地给你正确的代码,而不是让你通过它来理解它。
一旦你开始工作,我有两个建议:
1)你应该为数组使用int []而不是double []。任何不是整数的数字都不会干净地除以3.当您读取文件并添加到数字数组时,请在if语句中使用n%1==0
来检查读取的数字是否实际上是整数,应该添加到您的数组中。这将减少递归调用的数量,因为假设您能够处理一些非整数值,数组可能会更短。
2)你可以用两个参数来创建一个递归方法,即int数组和一个索引。可能没有必要,但可以省去担心传递指数的麻烦。提示:startIndex永远不会改变,通过了解数组的长度可以改善你的基本情况。
如果您需要澄清/更多提示,请随时在评论中向我提出更多问题。
答案 1 :(得分:0)
... String line = buffRead.readLine();
try {
while (line.equals("0") == false && i < 100) {
nums[i] = Double.parseDouble(line);
i++;
line = buffRead.readLine();
}
} catch (IOException e) {
System.out.println("Array index out of bound");
}
int sum = computeSumDivisibleBy3(nums);
System.out.print("The sum of the numbers divisible by 3 is " + sum + ('\n'));
.....
public static int computeSumDivisibleBy3(double[] numbers) {
return _computeSumDivisibleBy3(numbers, 0);
}
private static int _computeSumDivisibleBy3(double[] numbers, int currentIndex ) {
int sum = 0;
if (currentIndex != numbers.length) {
int currentNumber = (int)numbers[currentIndex];
sum = (currentNumber % 3) == 0 ? currentNumber : 0;
sum += _computeSumDivisibleBy3(numbers, ++currentIndex );
}
return sum;
}