这是我尝试做的事情: 从用户那里获得两个输入并验证它们。 1是一个介于1和20之间的随机数,另一个是它应该乘以的次数(1到10之间的数字,我通过取幂表示)
我不明白 - math.pow只适用于双打?此外,用户是否可能输入"错误"值而不是终止,程序再次请求输入?
我有这个:
import java.util.Scanner;
public class P01Multiplicador {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("insert number and how many times it will multiply itself over");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int nReps = in.nextInt();
if(n<1 || n>20 || nReps<1 || nReps>10){
System.out.println("values are not accepted, please insert again");
}
else{
do Math.pow(n, nReps);
while(n>1 && n<20 && nReps>1 && nReps<20);
}
in.close();
}
它询问了这些值,但没有正常运行(或者根本就没有),我猜测我使用了错误的语句或错误的变量类型。 java新手在这里。建议?
答案 0 :(得分:3)
您需要修复代码,使其成为有效的代码。
Math.pow使用双精度数,因为它根据输入产生大数和小数。例如即使4 ^ 20也不适合int
。
如果您想将结果舍入为long
,可以使用Math.round(x)
答案 1 :(得分:3)
这样的事情:
boolean accepted = false;
do{
System.out.println("insert number ....
if(n<1 || n>20 || nReps<1 || nReps>10){
System.out.println("values are not accepted, please insert again");
}else{
accepted = true;
}
}while( !accepted )
答案 2 :(得分:1)
Math.pow
接受双打并根据doc返回双倍。
为了让您的代码在输入错误的数字时获取新输入,您可以添加while(true)
循环。
while(true){
if(n<1 || n>20 || nReps<1 || nReps>10){
System.out.println("values are not accepted, please insert again");
n = in.nextInt();
nReps = in.nextInt();
}
else{
System.out.println(Math.pow(n, nReps));
break;
}
}
我已经使用break
在给出正确的值时结束循环,但是你可以获得新的输入而不是破坏(从你的代码看来)。然后你需要有一些其他的休息条件,否则它将再次成为无限循环。
答案 3 :(得分:-1)
在主要方法中使用以下代码
System.out.println("insert number and how many times it will multiply itself over");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int nReps = in.nextInt();
while (true) {
if (n < 1 || n > 20 || nReps < 1 || nReps > 10) {
System.out.println("values are not accepted, please insert again");
System.out.println("insert number and how many times it will multiply itself over");
n = in.nextInt();
nReps = in.nextInt();
} else {
System.out.println("" + Math.pow(n, nReps));
break;
}
}