我的目标是让用户输入类别的名称,该类别的等级以及该类别的权重。
理论上,除了我的第一个循环永远不会结束之外,一切都应该完美无缺。
这是我到目前为止的代码:
package gradecalculator;
import java.util.Scanner;
public class GradeCalculator
{
public static void main(String[] args)
{
String categoryName = null;
double categoryGrade;
double categoryWorth;
double Grade = 0;
String[] nameArray = new String[10];
double[] gradeArray = new double[10];
double[] worthArray = new double[10];
double[] categoryArray = new double[10];
int c = 0;
int c1 = 0;
Scanner entry = new Scanner(System.in);
while(!"Quit".equals(categoryName))
{
categoryName = entry.next();
nameArray[c] = categoryName;
categoryGrade = entry.nextDouble();
gradeArray[c] = categoryGrade;
categoryWorth = entry.nextDouble();
worthArray[c] = categoryWorth;
categoryArray[c] = finalCategory(categoryGrade, categoryWorth);
c++;
}
while(c != 0)
{
System.out.printf("%S:\t%f%\tWorth: %f\n", nameArray[c1], gradeArray[c1], worthArray[c1]);
c--;
c1++;
}
while(c1 != 0)
{
Grade = Grade + categoryArray[c];
c1--;
c++;
}
}
public static double finalCategory(double Grade, double Worth)
{
return (Grade * (Worth / 100));
}
}
我认为问题已经缩小到:
while(!"Quit".equals(categoryName))
{
categoryName = entry.next();
nameArray[c] = categoryName;
categoryGrade = entry.nextDouble();
gradeArray[c] = categoryGrade;
categoryWorth = entry.nextDouble();
worthArray[c] = categoryWorth;
categoryArray[c] = finalCategory(categoryGrade, categoryWorth);
c++;
}
,更具体地说:
while(!"Quit".equals(categoryName))
我想要完成的是,一旦用户输入categoryName
并且结果是“退出”,则while循环将终止,程序将继续。显然这没有发生,所以我非常感谢任何帮助解决问题。
答案 0 :(得分:1)
在你输入其他双打之前,你要categoryName
。即使您输入"Quit"
,您的程序仍在等待您输入下一个双打。
答案 1 :(得分:0)
问题是,即使categoryName
为"Quit"
,while循环体也会继续执行。您可以将entry.next()
分配给categoryName
并在while循环条件下执行"Quit"
全部检查:
while(!(categoryName = entry.next()).equals("Quit"))
{ ... }
必须删除此行(while循环体的第一行):
categoryName = entry.next();
您的格式字符串也存在问题:
"%S:\t%f%\tWorth: %f\n"
%\t
会尝试查找制表符的转化。如果您想按字面意思打印%
,请使用其他%
:
"%S:\t%f%%\tWorth: %f\n"
答案 2 :(得分:0)
您可以检查用户输入的字符串是否为" quit"他们输入字符串后直接输入。只需在categoryName = entry.next();
之后添加以下代码即可 if(categoryName.equalsIgnoreCase("quit"))
break;
这忽略了用户输入的情况,如果你想要的话。