0

一連の数字を使用して入力を受け取るプログラムを書いています。再帰と配列を使用して、入力された 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);           
    }      
}
}
4

2 に答える 2

1

ここでいくつかのことを確認してください:

1) 次の場合、数値 n は 3 で割り切れますn%3 == 0n%3 == 1

2) 数値が 3 で割り切れるかどうかを確認する場合、配列内の実際の数値ではなく、INDEX が 3 で割り切れるかどうかを確認しています (numbers[endIndex] を使用)。

これら2つのことを整理すれば、うまくいくはずです。これは宿題のように思えるので、作業を進めて理解させるのではなく、正しいコードを提供することだけに気をつけています。

機能するようになったら、次の 2 つの推奨事項があります。

1) 配列には double[] の代わりに int[] を使用する必要があります。整数でない数値は 3 できれいに除算されません。ファイルを読み取って数値の配列に追加するn%1==0場合は、if ステートメントで使用して、読み取った数値が実際に整数であり、追加する必要があるかどうかを確認します。あなたの配列に。これにより、整数以外の値を破棄できたと仮定すると、配列が短くなる可能性があるため、再帰呼び出しの量が削減されます。

2) int の配列と 1 つのインデックスの 2 つのパラメーターだけで再帰的なメソッドを作成できます。おそらく必要ありませんが、インデックスを渡すことを心配する頭痛の種から解放されます。ヒント: startIndex は変更されません。配列の長さを知ることで基本ケースを改善できます。

説明やヒントが必要な場合は、コメントでお気軽に質問してください。

于 2013-11-08T16:04:33.093 に答える