【发布时间】:2018-11-12 22:51:18
【问题描述】:
我的代码在我的编译器中运行良好,我什至尝试了其他几个在线编译器,但仍然无法找到问题,谁能帮忙!
问题
https://www.codechef.com/JUNE18B/problems/NAICHEF
有一次,在紧张了一天之后,Chef 决定放松一下,去他家附近的一家赌场赌博。他觉得自己很幸运,他将赌上几乎所有的钱。
Chef 将在赌场玩的游戏是用 N 掷骰子 面对两次。骰子的每个面上都有一个数字(这些数字不一定不同)。为了获胜,Chef 必须获得数字 A 在第一次投掷和数字 B 在第二次掷骰子时。
激动的观众想知道大厨赢得比赛的概率。你能帮他们找到那个号码吗?假设 Chef 在每次投掷时以相同的概率获得骰子的每张面,并且投掷是相互独立的。
我的提交
import static java.lang.System.exit;
import java.util.*;
import java.lang.*;
/**
*
* @author williamscott
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean status = true;
int T = Integer.parseInt(in.nextLine());
//Original Constraint
if (T < 1 || T > 10) {
// System.out.println("Please follow original constraint for T");
// exit(0);
status = false;
}
int N[] = new int[T], A[] = new int[T], B[] = new int[T];
float Probability[] = new float[T];
for (int t = 0; t < T; t++) {
String[] input = in.nextLine().split(" ");
N[t] = Integer.parseInt(input[0]);
A[t] = Integer.parseInt(input[1]);
B[t] = Integer.parseInt(input[2]);
if (N[t] < 1 || N[t] > 100) {
// System.out.println("Please follow original constraint for N");
// exit(0);
status = false;
}
if (A[t] < 1 || A[t] > N[t]) {
// System.out.println("Please follow original constraint for A");
// exit(0);
status = false;
}
if (B[t] < 1 || B[t] > N[t]) {
// System.out.println("Please follow original constraint for B");
// exit(0);
status = false;
}
float pn, pa = 0, pb = 0;
String[] f = in.nextLine().split(" ");
pn = f.length;
if (pn != N[t]) {
// System.out.println("Inputs Invalid");
// exit(0);
status = false;
}
for (String f1 : f) {
if (Integer.parseInt(f1) < 1 || Integer.parseInt(f1) > N[t]) {
// System.out.println("Please follow original constraint for x (input)");
// exit(0);
status = false;
}
if (Integer.parseInt(f1) == A[0]) {
pa++;
}
if (Integer.parseInt(f1) == B[0]) {
pb++;
}
}
Probability[t] = (pa / pn) * (pb / pn);
}
if (status) {
for (float d : Probability) {
System.out.println(String.format("%.10f", d));
}
}
}
}
【问题讨论】:
-
将作业的相关部分以及您的代码发布到问题中,并清楚地说明您的代码输出错误结果的输入以及正确的结果应该是什么。
-
@luk2302 感谢您的快速回复,我更新了问题...
-
感谢您对问题的改进 -- 删除了反对票和近距离投票。我没有时间浏览代码,但有几个建议:避免使用浮点数进行
==和!=,因为这些比较不适用于浮点的不精确表示。相反,这些数字可能应该是整数。当您通过强制转换在概率计算中进行除法时,您需要将它们转换为双精度,但在您绝对需要双精度之前将它们保留为整数。 -
顺便说一句,你会想学习和使用Java naming conventions。变量名应全部以小写字母开头,而类名应以大写字母开头。学习这一点并遵循这一点将使我们更好地理解您的代码,并使您更好地理解他人的代码。
-
另外从不在双精度工作时使用浮点数。否则,您会损失很多精度而收获很少。
标签: java error-handling compiler-errors