2017-02-05 12 views
0

私はこのコードで数時間立ち往生しています。 合計はS = 1-x + x^2 - x^3 + x^4です。
開始値がi = 0XNをお願いします。 前の指数(i)が奇数であるときは、前の指数がさらにx^iを引いた場合は、x^iと を加算します。
私はそれらをループに入れましたが、私は合計を正しく得ることができません。 誰かが私が間違っていることを教えてもらえますか? ありがとうございました!私はこのアルゴリズムで間違っているのですか?

import java.util.Scanner; 

public class hw1 { 
    public static void main(String[] args) { 
     try (Scanner scan = new Scanner(System.in)) { 
      System.out.println("Sum = 1^0-x^1+x^2-x^3..+x^n"); 
      System.out.println("Enter number X"); 
      int X = scan.nextInt(); 
      System.out.println("Enter number N"); 
      int N = scan.nextInt(); 
      int sum = 0; 
      for (int i = 0; i <= N; i++) { 
       if (i < N) { 
        if (i % 2 != 0) // if I is even 
        { 
         sum = sum - (X^i); 
        } else // if I is odd 
        { 
         sum = sum + (X^i); 
        } 
       } 
      } 
      System.out.println("Z is " + sum); 
     } 
    } 
} 
+1

SO(http://stackoverflow.com/help/how-to-ask)の質問ページをご覧ください。完全な質問が投稿された場​​合は、(援助する)方が簡単でしょう。また、なぜ 'i <= N'の条件でforループを実行するのですが、すぐにその条件の中に' if(i

+1

ありがとうございました。 – Nicole

答えて

1

だから私はあなたのコード内のいくつかのことを固定:

  1. 私はMath.pow用(@Nickベルが指摘したように、排他的論理和ビット単位で、)^オペレータを切り替えます。
  2. 変数xnのスペルを修正しました。 Javaでは、小文字で始まる変数名を指定するのが一般的です。大文字(XN)は、定数(finalと記されたフィールド)とクラス(オブジェクトではない)のために予約されています。これは慣習に過ぎず、コードは両方向でうまく機能することに注意してください。それは単にコードを読むのに役立ちます。
  3. 奇数/偶数のチェックが逆になりました。偶数の場合、x % 2 == 0trueです。
  4. あなたの奇数/偶数チェックを逆転させた理由はおそらくsumの2つの操作が逆転したためです。質問の最初の段落で問題の説明と比較すると、どこが間違っているかがわかります。
  5. if i < Nのチェックは冗長でした。計算をi < Nに制限したかったので、最初のforループで直接指定する必要があります。
  6. 整数を入力したときに壊れる無限ループを持つ2つのtry/catchブロックを追加しました。前のコードで例外がスローされたため、整形された整数以外の文字(10進数値)。それらを保つか、削除するまであなたに任せます。
  7. ちなみに、xn~0の初期化は、すぐに別の値を割り当てることが保証されているため、冗長です。

これは更新されたコードです。

public static void main(String[] args) { 
    try (Scanner scan = new Scanner(System.in)) { 
     System.out.println("Sum = 1^0-x^1+x^2-x^3..+x^n"); 
     System.out.println("Enter number X"); 
     int x = 0; 
     while (true) { 
      try { 
       x = Integer.parseInt(scan.nextLine()); 
       break; 
      } catch (NumberFormatException e) { 
       System.out.println("Enter an integer."); 
      } 
     } 
     System.out.println("Enter number N"); 
     int n = 0; 
     while (true) { 
      try { 
       n = Integer.parseInt(scan.nextLine()); 
       break; 
      } catch (NumberFormatException e) { 
       System.out.println("Enter an integer."); 
      } 
     } 
     double sum = 0; 
     for (int i = 0; i <= n; i++) { 
      if (i % 2 == 0) // if I is even 
       sum = sum + Math.pow(x, i); 
      else // if I is odd 
       sum = sum - Math.pow(x, i); 
     } 
     System.out.println("Z is " + sum); 
    } 
} 
+0

'import java.util。スキャナ; パブリッククラスHW1 {\tパブリック静的無効メイン(文字列[] args){ \t \tダブルI、X = 0、N = 0、和= 0。 \t \t試し(スキャナのスキャン=新しいスキャナ(System.in)) { \t \tのSystem.out.println( "Xを入力してください"); \t \t int X = scan.nextInt(); \t \t System.out.println( "Enter N"); \t \t int N = scan.nextInt(); (; iは<= N; I = 0 iが++)のため \t \t \t \t \t \t { \t \t \t \t(!私%2 = 0) \t \t \t \t { \t \t \t \t和=和なら - Math.pow(X、i);他 \t \t \t \t} \t \t \t \t \t // Iが奇数の場合 \t \t \t \t { \t \t \t \t和=和+ Math.pow(X、I)。 \t \t \t \t} \t \t \t} \t \tするSystem.out.println(+和 "Zです")。 } } } ' – Nicole

関連する問題