0

我目前正在开发一个计算某些数字的幂的程序。数量限制是 1 到 9。我的代码发布在下面。我有以下问题:

  1. 每次我运行程序时,它都不会打印正确的答案。

  2. 我想修改代码,以便应用程序计算 X 到 Y 的幂,其中 X 和 Y 可以是 1 到 9(包括 9)范围内的整数。如果用户输入了无效值,程序应该再次要求用户输入。当用户完成输入基数和指数的值时,程序将打印结果。

这个任务的条件是我必须使用循环通过多次乘法来计算结果;我不允许使用任何可用的方法或 API 来为我计算结果。请帮我想出解决方案。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package exponent;
//import java.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int b,e;

    System.out.println("Enter the base");
    b = Integer.parseInt(br.readLine());
    System.out.println("Enter the power");
    e = Integer.parseInt(br.readLine());
    int t = 1;
    for(int i = 1;i <= e; i++);
    {
        t=t*b;
    }
    System.out.println(t);

    }
    // TODO code application logic here
}
4

4 回答 4

6

首先,for 循环后不应该有分号:

for(int i=1;i<=e; i++ )
        {
            t=t*b;
        }

一个简单的输入测试可能是这样的:

public boolean testInput(int e)
{
if(e>9||e<1)//where e is the inputted number
{
return false
}
else 
{
return true;
}

}

然后像这样使用它:

  boolean valid = false;
  while(valid!=true)
  {
  e = Integer.parseInt(br.readLine());
  if(testInput(e)==false)
  {
  System.out.println("Please enter a number between 1 and 9")
  continue;
  }
  else
  {
  valid = true;
  }
  }
于 2013-11-14T17:48:25.050 回答
0

从 for 循环中删除分号

 for(int i=1;i<=e; i++ );

 for(int i=1;i<=e; i++ )
于 2013-11-14T18:02:35.227 回答
0

对于第一部分,这是一个简单的修复。您刚刚在 for 循环中不应该出现的位置添加了一个分号。

for(int i = 1;i <= e; i++); {

for(int i = 1;i <= e; i++){ //There should be no semicolon here

对于第二部分,您可以使用两个非常简单的 do-while 循环来完成。

//Replace this
System.out.println("Enter the base");
b = Integer.parseInt(br.readLine());
System.out.println("Enter the power");
e = Integer.parseInt(br.readLine());

//with
do{
    System.out.println("Enter the base");
    b = Integer.parseInt(br.readLine()); 
}while(b > 9 || b < 1);

do{
    System.out.println("Enter the power");
    e = Integer.parseInt(br.readLine()); 
}while(e > 9 || e < 1);

因此,do-while 循环将首先询问基数或功率(取决于程序在代码中运行的位置),然后将 int 设置为该值。如果该值大于 9,即:10 或以上,程序将重新请求 base 或 power(就像我说的,取决于哪个 loo 正在运行),然后它会再次设置 int。它会这样做,直到值低于 10。如你所愿。

以下是输出示例:

Enter the base
56
Enter the base
-4
Enter the base
4
Enter the power
67
Enter the power
10
Enter the power
-8
Enter the power
7
4 to the 7th power is 16384

如果代码片段令人困惑,这里是整个可编译的工作类:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class StackOverflowAnswers{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int b,e;

        do{ //Asks for the base
            System.out.println("Enter the base");
            b = Integer.parseInt(br.readLine()); 
        }while(b > 9 || b < 1); //If the base is not valid, it goes back to the "do" statement, which asks for the base, again.

        do{ //Asks for the power
            System.out.println("Enter the power");
            e = Integer.parseInt(br.readLine()); 
        }while(e > 9 || e < 1); //If the power is not valid, it goes back to the "do" statement, which asks for the power, again.

        int t = 1;

        for(int i = 1;i <= e; i++){ //No semicolon here
            t=t*b;
        }
        System.out.println(b + " to the " + e + "th power is " + t); //Just added some words and the base and the power for easier debugging and understanding.
    } 
}

希望这可以帮助。

于 2013-11-14T18:16:13.947 回答
0

对于第一部分,它正在发生,因为您在循环声明之后放置了一个分号,java 只是循环到那个分号,仅此而已。通过删除分号,循环应该可以工作。但是,对于第二部分,您可以只添加 inputcheck 方法,如下面的代码所示。

import java.io.*;
public class abc {
public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int b, e;
    System.out.println("Enter the base");
    b = check(Integer.parseInt(br.readLine()));
    System.out.println("Enter the power");
    e = check(Integer.parseInt(br.readLine()));
    int t = 1;
    for (int i = 1; i <= e; i++); {
        t = t * b;
    }
    System.out.println(t);
}

private static int check(int x) {
    while (x < 1 || x > 10)
        x = Integer.parseInt(br.readLine());
    return x;
}
于 2013-11-14T18:36:10.383 回答