Программа расчета мощности 2 - PullRequest
1 голос
/ 07 марта 2011

Я пишу простую программу для вычисления мощности 2. Пользователь будет вводить число раз, которое он хочет рассчитать мощность 2, скажем, пользователь вводит 4, моя программа возвращает 2,4,8,16. Вот код

import java.util.Scanner;

public class PowersOf2

{

public static void main(String[] args)

{

int numPowersOf2;        
//How many powers of 2 to compute

int nextPowerOf2 = 1;    
//Current power of  2

int exponent = 0;            

//Exponent for current power of 2 -- this

//also serves as a counter for the loop

Scanner scan = new Scanner(System.in);

        System.out.println("How many powers of 2 would you like printed?");
        numPowersOf2 = scan.nextInt();

        //print a message saying how many powers of 2 will be printed
        //initialize exponent -- the first thing printed is 2 to the what?

    System.out.println("Here are the first " + numPowersOf2 + " power of 2");


      while (exponent<numPowersOf2)
        {
          //print out current power of 2

            nextPowerOf2=nextPowerOf2*2;

            exponent++;

            System.out.println(nextPowerOf2);
            //find next power of 2 -- how do you get this from the last one?

            //increment exponent
             }
        }
}

Если я хочу, чтобы он начинался с 0, сначала скажем как 2 ^ 0 = 1, поэтому, если пользователь введет 4, он вернет 1,2,4,8 вместо2,4,8,16.Как мне изменить это, чтобы получить это?

Ответы [ 8 ]

5 голосов
/ 08 марта 2011

2 n == (1 << n);0 <= n <32 </p>

3 голосов
/ 07 марта 2011

Просто напечатайте nextPowerOf2, прежде чем его изменить.

while (exponent<numPowersOf2)
{
    System.out.println(nextPowerOf2);

    nextPowerOf2=nextPowerOf2*2;
    exponent++;
}
1 голос
/ 07 марта 2011

Вы должны печатать ТОЛЬКО значение перед умножением на 2.

 //print out current power of 2
 System.out.println(nextPowerOf2);
 nextPowerOf2=nextPowerOf2*2;
 exponent++;
0 голосов
/ 17 февраля 2015

Вместо использования:

while (exponent < numPowersOf2)

Используйте это:

while (exponent <= numPowersOf2)

// <= will start with 0, which is 2^0=1
0 голосов
/ 15 октября 2013
int numpowerof2 = 4, nextpower0f2 = 2, exponent = 0;
while(exponent < numpowerof2) {
  System.out.println(nextpower0f2);
  nextpower0f2 = nextpower0f2 * 2;
  exponent++;
}
0 голосов
/ 27 ноября 2012

Попробуйте это?Они достаточно быстрые и соответствуют большинству потребностей: предыдущий, текущий и следующий.

РЕДАКТИРОВАТЬ: заметил, что вы хотите, чтобы он распечатывал все, хорошо, что вы могли бы сделать, где циклы while добавить печать.*

public static int getPowerOfTwo(int size)
{
    int n = -1;
    while (size >> ++n > 0);
    return (1 << n - 1 == size) ? size : 1 << n;
}

public static int getNextPowerOfTwo(int size)
{
    int n = -1;
    while (size >> ++n > 0);
    return 1 << n;
}

public static int getPreviousPowerOfTwo(int size)
{
    int n = -1;
    while (size >> ++n > 0);
    return 1 << n - 1;
}

На всякий случай, если вы не можете понять это, должно работать следующее:

public static void displayNextPowersOfTwo(int size)
{
    int n = -1;
    while (size >> ++n > 0) {
         System.out.print((1 << n) + ",");
    }
    System.out.print('\n');
}
0 голосов
/ 07 марта 2011
 nextPowerOf2 = 1;
 exponent     = 0;
 do
 {
     System.out.println(nextPowerOf2);
     nextPowerOf2=nextPowerOf2*2;
     exponent++;
 }
 while( exponent < numPowersOf2 );

Это должно сделать это.

0 голосов
/ 07 марта 2011

Сначала распечатайте, затем обновите.Просто переупорядочение операций:

while (exponent<numPowersOf2)
{
    //print out current power of 2
    System.out.println(nextPowerOf2);

    //find next power of 2
    nextPowerOf2=nextPowerOf2*2;

    //increment exponent
    exponent++;
}

Теперь с правильными отступами и комментариями в разумных местах тоже!

Кстати, имеет смысл написать это с помощью цикла for:

for (int exponent = 0; exponent < numPowersOf2; ++exponent) {
    //print out current power of 2
    System.out.println(nextPowerOf2);

    //find next power of 2
    nextPowerOf2=nextPowerOf2*2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...