Java等级计算器

时间:2014-12-12 01:17:38

标签: java string while-loop runtime-error

我的目标是让用户输入类别的名称,该类别的等级以及该类别的权重。

理论上,除了我的第一个循环永远不会结束之外,一切都应该完美无缺。

这是我到目前为止的代码:

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循环将终止,程序将继续。显然这没有发生,所以我非常感谢任何帮助解决问题。

3 个答案:

答案 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;

这忽略了用户输入的情况,如果你想要的话。