2014-12-12 2 views
1

Моя цель состоит в том, чтобы пользователь вводил название категории, сорт этой категории и вес этой категории.Калькулятор Java-класса

Теоретически все должно работать отлично, за исключением того, что мой первый цикл никогда не заканчивается.

Это код, который я до сих пор:

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, и он окажется слово «Quit», цикл while будет завершен, и программа будет двигаться дальше. Очевидно, этого не происходит, поэтому я бы очень признателен за любую помощь в решении проблемы.

+0

Попробуйте поместить 'if (categoryName.equals (« Quit »)) break;' после вызова каждого '.next()' и '.nextDouble()' и до того, как вы присвоите значение массиву – chancea

ответ

0

Проблема заключается в том, что корпус while-loop продолжает выполнение, даже если categoryName - "Quit". Вы можете назначить entry.next() для categoryName и сделать "Quit" проверку все в состоянии это время с обратной связью по:

while(!(categoryName = entry.next()).equals("Quit")) 
{ ... } 

Эта линия должны быть удалены (первая линия While-петли тела):

categoryName = entry.next(); 

Там же проблема в вашем формате строки:

"%S:\t%f%\tWorth: %f\n" 

%\t попытается найти преобразование для символа табуляции. Если вы хотите напечатать % буквально, избежать его с другим %:

"%S:\t%f%%\tWorth: %f\n" 
1

Вы запрашиваете у вас categoryName, прежде чем принимать входные данные для других парных разрядов. Ваша программа ждет, пока вы входите в следующие парные номера даже после ввода "Quit".

0

Вы можете проверить, если строка, введенная пользователем была «бросить» непосредственно после того, как они ввода их строки. Просто добавьте код ниже после categoryName = entry.next();

if(categoryName.equalsIgnoreCase("quit")) break;

Это игнорирует случай, когда пользователь вводит, а также, если это то, что вы хотите.