我正在编写一个java程序,它将从键盘4输入读取,名为Test1,Test2,Test3,Final。然后,程序将确定测试1,2和3的3个测试等级中的最佳2(BTest1,BTest2)。然后,它将使用以下评分策略计算最终成绩: BTest1:30%BTest2:30%Final:40%
这是我得到的:
public static void main (String[] args)
{
Scanner scan = new Scanner (System.in);
int Test1 = 0,
Test2 = 0,
Test3 = 0,
Final = 0;
double AVG;
// Test 1 input
System.out.println ("Enter Test 1: ");
Test1 = scan.nextInt();
while ((Test1 < 0) || (Test1 > 100))
{
System.out.println ("Invalid Input, try again.");
Test1 = scan.nextInt();
}
// Test 2 input
System.out.println ("Enter Test 2: ");
Test2 = scan.nextInt();
while ((Test2 < 0) || (Test2 > 100))
{
System.out.println ("Invalid Input, try again.");
Test2 = scan.nextInt();
}
// Test 3 input
System.out.println ("Enter Test 3: ");
Test3 = scan.nextInt();
while ((Test3 < 0) || (Test3 > 100))
{
System.out.println ("Invalid Input, try again.");
Test3 = scan.nextInt();
}
// Final Exam input
System.out.println ("Enter Final Exam: ");
Final = scan.nextInt();
while ((Final < 0) || (Final > 100))
{
System.out.println ("Invalid Input, try again.");
Final = scan.nextInt();
}
// Find the highest out of the 3 tests
int BTest1,
BTest2;
if ((Test1 >= Test2) && (Test1 >= Test3))
BTest1 = Test1;
if ((Test2 >= Test1) && (Test2 >=Test3))
BTest2 = Test2;
if ((Test3 >= Test1) && (Test3 >= Test2))
BTest2 = Test3;
// Compute the Average
AVG = ((BTest1 * .3) + (BTest2 * .3) + (Final * .4));
if (AVG >= 90)
System.out.println ("A " + AVG);
else
if (AVG >= 80)
System.out.println ("B " + AVG);
else
if (AVG >= 70)
System.out.println ("C " + AVG);
else
if (AVG >= 60)
System.out.println ("D " + AVG);
else
System.out.println ("F " + AVG);
}
}
我遇到的问题是我无法降低最低等级。 有人可以请我指导正确的方向吗?
提前谢谢!
答案 0 :(得分:0)
您的问题是您认为Test1将自动高于Test2或Test3,但如果不是(例如10,50,60),则BTest1将永远不会被设置。要正确执行此操作,您需要一系列非常长的if / else调用。但有一种更简单的方法:
public static void main(String[] args) {
final Scanner scan = new Scanner(System.in);
final int[] testScores = new int[3]; // use an array here
Arrays.fill(testScores, -1); // set all to -1 to know if we already got a proper input
for (int i = 0; i < testScores.length; ++i) { // for loop simplifies the whole thing a lot
while ((testScores[i] < 0) || (testScores[i] > 100)) {
System.out.println("Please enter Test " + (i + 1) + ":");
testScores[i] = scan.nextInt();
}
}
int exam = -1; // Final is a bad name, because final is a reserved word
while ((exam < 0) || (exam > 100)) {
System.out.println("Please enter Final Exam:");
exam = scan.nextInt();
}
Arrays.sort(testScores); // automatically sorts the entry from lowest to highest
final double AVG = (testScores[testScores.length - 1] + testScores[testScores.length - 2]) * 0.3 + exam * 0.4; // therefore the best grades are the last two entries
if (AVG >= 90) {
System.out.println("A " + AVG);
} else if (AVG >= 80) {
System.out.println("B " + AVG);
} else if (AVG >= 70) {
System.out.println("C " + AVG);
} else if (AVG >= 60) {
System.out.println("D " + AVG);
} else {
System.out.println("F " + AVG);
}
}
答案 1 :(得分:-1)
您可以执行以下操作:
TreeSet<Integer> tests = new TreeSet<Integer>();
tests.add(test1);
tests.add(test2);
tests.add(test3);
if (tests.size() == 1) {
bTest1 = tests.last();
bTest2 = tests.poolLast();
} else {
bTest1 = tests.poolLast();
bTest2 = tests.poolLast();
}
它将生成一组最多3个元素,然后检索集合中的2个最大元素(当集合中只有1个元素时也处理情况 - 所有插入的值都相同)。
看看Java naming conventions。你的所有变量对我来说都是类。
编辑:更改了bTest1
和bTest2
的地点 - 并不是会改变任何内容(请参阅评论)。