2015-01-14 43 views
2

我試圖找到答案時不能使用數學類。計算答案時,我必須使用for循環。試圖找到負指數的答案,只有正指數和0作品

package Powers; 

import TerminalIO.KeyboardReader; 

public class powers { 
public static void main(String [] args) 
{ 
    KeyboardReader reader= new KeyboardReader(); 
    //Variables 
    int base; //The base number for the calculations 
    int minE; //The minimum exponent that will be used 
    int maxE; //The maximum exponent that will be used 
    int answer; //Weather the user wishes to repeat or not 
    double result = 1; //The result of the base to the power of the exponent 

    //Inputs 
    do { /* Start of repeat */ base = reader.readInt ("Please enter the base. "); 
    minE = reader.readInt ("Please enter the minimum exponent. "); 
    maxE = reader.readInt ("Please enter the maximum exponent. "); 
     //Error Checking 
     while (minE > maxE) { 
      System.out.println("There seems to be an error, your minimum exponent is greater then your maximum exponent. Please re-enter your values"); 
      minE = reader.readInt("Enter your minimum exponent. "); 
      maxE = reader.readInt("Enter your maximum exponent. "); 
     } 
     //End of Error Checking 

    //Calculations   
     //Output  
     System.out.println(" Base   Exponent   Result"); 
     System.out.println(); 
     int expo; //The exponent by which the base will be powered to 
     for (expo = minE; expo <= maxE; expo++) { 

      //For exponent being 0 
      result = 1; 
      //For exponent being <0 
      if (expo <0) { 
       for (int i= minE;i != 0;i = i + 1) { 
        result = result/base; 
       } 
      } 

      if (expo == 0) { 
       result = 1 ; 
      } 

      //For exponent being 1 
      if (expo == 1) { 
       result = base; 
      } 
      //For exponent being >1 
      if (expo > 1) { 
       for (int i=1;i<=expo;i++) { 
        result = result*base; 
       } 
      } 



      System.out.println(" " + base + "     " + expo + "    " + result); 
     } 
     System.out.println(); 
     answer = reader.readInt ("Do you wish to repeat? Enter 1 if yes."); 
    } while (answer == 1); //End of repeat 

} 

}

散發出來的一個例子答案是

Please enter the base. 2 
Please enter the minimum exponent. -2 
Please enter the maximum exponent. 2 
Base   Exponent   Result 

2     -2    0.25 
2     -1    0.25 
2     0    1.0 
2     1    2.0 
2     2    4.0 

正如你可以看到只有0和積極的工作,而不是否定。

+0

當'expo'爲負值時執行的for循環根本不使用'expo'。那就是問題所在。 – ajb

回答

0

我剛在負循環中加了一個「counter」。您始終在所有計算中爲負值存儲「-2」(或最低值)的值。

您必須添加+1 (-2 + 1 = -1)才能正確劃分。

這只是一個邏輯問題輸出

int counter = 0; 
    for (expo = minE; expo <= maxE; expo++) { 

     //For exponent being 0 
     result = 1; 
     //For exponent being <0 
     if (expo < 0) { 
      for (int i = (minE + counter); i != 0; i = i + 1) { 
       result = result/base; 
      } 
      counter++; 
     } 

示例:i

Base   Exponent   Result 

    2     -3    0.125 
    2     -2    0.25 
    2     -1    0.5 
    2     0    1.0 
    2     1    2.0 
    2     2    4.0 
    2     3    8.0 
3

你沒看錯初始化。而不是i= minE將其更改爲i= expo

for (int i = expo; i != 0; i = i + 1) { 
    result = result/base; 
} 
+0

噢,不錯,我只是讓事情變得更難。但仍然有效+1 – Frakcool