-3

プログラムを作成しましたが、2 つの問題があります。

  1. カウンター i が 1 から x になるのは望ましくありません。これは、実際のユーザー入力よりも小さい数値ごとに割り切れるテストが試行されるためです。2 から 12 まで i を開始して、2-12 のみのテストを試す必要があります。

  2. 割り切れるテストは正しく、すべての数値に対して機能しますが、それはプログラムの説明で求められているものではありません。割り切れるテストごとに、前述のアルゴリズムを実装する必要があります。(私は調査しましたが、それを行う方法がわかりません)私が持っているこの単純化されたプログラムはより理にかなっています-開始する場所だけが役立ちます

(注: % モジュラス演算子は使用できません)

2 で割る 最後の桁が偶数 (0,2,4,6,8) 例: 128 は 129 ではありません 3 で割る 桁の合計は 3 で割り切れます 例:381 (3+8+1=12,そして 12÷3 = 4) はい 217 (2+1+7=10, そして 10÷3 = 3 1/3) いいえ 4 で割ります 下 2 桁は 4 で割り切れます 例: 1312 は (12÷4=3 ) 7019 は 5 ではありません 最後の桁は 0 または 5 です 175 は 809 は 6 による除算ではありません (注: 別のユーザー定義関数として 6 を実行するか、2 と 3 の関数を使用することができます) 数値は 2 と 3 の両方で割り切れます例: 114 (偶数で 1+1+4=6 かつ 6÷3 = 2) はい 308 (偶数ですが 3+0+8=11 で 11÷3 = 3 2/3) いいえ

まだまだありますが、有用な情報が含まれている開始またはリンクの場所だけをいただければ幸いです。ありがとうございました

import java.io.PrintStream;
import java.util.Scanner;

public class rwsFinalExam
{
    public static void main(String [] args)
    {
        Scanner scanner = new Scanner( System.in ); 
                     //allows input from concole
        PrintStream out = System.out;               
                    //assigning System.out to PrintStream

        out.print( "Input a valid whole number: " ); 
                    //ouput directions for end user to enter a whole number

        String input = scanner.next();  //holds end user input
        int number;                     //data type and variable 

        try 
        {
            number = Integer.parseInt(input);   
                  //assinging value to number 
                  //integer.parseInt method converts string to int
        }
        catch (Exception e)
        {
            out.println(input + " is not a valid number");
            return;
        }

        if (number < 0)
        {
            out.println(number + " is not a valid number");
            return;
        }

        printDivisors(number);
    }

    private static void printDivisors(int x)
    {
        PrintStream out = System.out;
        for (int i=1; i<x; i++) 
        {
            if (isDivisibleBy(x, i)) //checking divisibility 
            {
                out.println(x + " is divisible by " + i); 
                     //output when value is divisible 
            }
            else
            {
                out.println(x + " is not divisible by " + i); 
                     //output when value not divisible
            }//end if else
        }//end for
    }//end private static

    private static Boolean isDivisibleBy(int x, int divisor)
    {
        while (x > 0)
        {
            x -= divisor;
            if (x == 0)
            {
                return true;
            }
        }
        return false;
    }//end
}//end class rwsFinalExam
4

1 に答える 1

0

最初にすべきことは、配列内の数字を取得することです。

 private static Boolean isDivisibleBy(int x, int divisor)
{
    char[]b=String.valueOf(x).toCharArray();
    //Store all your digits as characters
    int[]no= new int[b.length];
    for (int i=0;i<b.length;i++)
       no[i]=Integer.parseInt(String.valueOf(b[i]));
    //Now no contains all your integers as an array 
    if(divisor==2)
           return isDivisibleBy2(no);
    else if(divisor==3)
           return isDivisibleBy3(no);
    else if(divisor==4)
           return isDivisibleBy4(no);
    //...................
    else return false;
}

次に、各テストに対して、2 のようにメソッドを記述します。

private static Boolean isDivisibleBy2(int[] x){
         int lastDigit=x[x.length-1];
         if(lastDigit==0 || lastDigit==2 || lastDigit==4 || lastDigit==6 || lastDigit==8)
           return true;
        else
           return false;
}

とにかく、テストごとに同様のコードを作成する必要があります。

于 2012-12-10T04:42:14.797 に答える