2016-04-19 3 views
0
public static void main(String[] args) { 

    Scanner keyboard = new Scanner (System.in); 
    double budget, total, expenseTotal; 

    System.out.print("Enter your budget for the month: "); 
    budget = keyboard.nextDouble();   
    System.out.println("Type -99 to stop calculations\n"); 
    byte start = 1; 

    double expense = 0; 

    while (expense != -99) { 

     System.out.print("Enter expense " + start + " :"); 
     expense = keyboard.nextDouble(); 

     start++;    

     if (expense == -99) { 
      System.out.println(); 
      total = (budget - expense) - 99; 
      System.out.printf("Your current total budget is: $%,.2f \n" , total); 
     } 
    } 
} 

Токовый выход:Как изменить переменную вне цикла

Введите свой бюджет за месяц: 1000 Тип -99, чтобы остановить расчеты

Введите счет 1: 100

Введите расходы 2: -99

Ваш текущий бюджет составляет: $ 1,000,00

Желаемый результат:

Ваш текущий общий бюджет: $ 900,00

Проблема: счет был объявлен вне заявления в то время и получает номер 0. Я понял, что, поскольку расходы = keyboard.nextDouble(); был в цикле, что он будет обновлять расходы, которые были помещены вне цикла, но это не так. Итак, любые решения? Благодарю.

+0

Что привело вас к выводу, что оно не обновлялось? Вы попробовали 'println' сразу после ввода клавиатуры? –

+0

Потому что всего = (бюджет - расход) - 99; –

+0

Ваша проблема в том, что 'nextDouble()' не пропускает строку после использования. См. Ссылку. –

ответ

1

Попробуйте ниже:

public static void main(String[] args) { 

    Scanner keyboard = new Scanner (System.in); 
    double budget; 


    System.out.print("Enter your budget for the month: "); 
    budget = keyboard.nextDouble();   
    System.out.println("Type -99 to stop calculations"); 
    System.out.println(); 
    byte start = 1; 

    double expense = 0; 

    while (expense != -99) { 

     System.out.print("Enter expense " + start + " :"); 
     expense = keyboard.nextDouble(); 
     if (expense == -99) { 
      System.out.println(); 
      System.out.printf("Your current total budget is: $%,.2f \n" , budget); 
     }else{ 
      budget = (budget - expense); 
     } 
     start++;    
    } 
} 
0

Вместо

expense = keyboard.nextDouble(); 

ли

expense += keyboard.nextDouble(); 

, которая является такой же, как

expense = expense + keyboard.nextDouble(); 

Если все исправить.

+0

Выполнение этого привело к тому, что цикл потерял возможность завершить с помощью ввода -99. –

+0

Справа. Затем добавьте переменную для увеличения: ** expBuffer = keyboard.nextDouble(); расход + = expBuffer; ** и затем ** while (expBuffer! = -99). ** Не забудьте создать переменную. – Cthulchu

+0

Там уже 'расходTotal' :) –

0

Вы упоминаете, что расход объявлен вне цикла в то время, это верно. Но ваш costTotal is также, заявленный за пределами цикла while. И я предполагаю, что это переменная, в которой вы намеревались хранить накопленные суммы расходов (которых нет в вашем коде). Внесение этих незначительных изменений в вашу программу даст желаемый результат.

Я добавил инициализации общей и expenseTotal, добавил строку в accummulate expenseTotal и изменил линию, где вы рассчитать общую:

public class Testprogram { 

    public static void main(String[] args) { 

     Scanner keyboard = new Scanner (System.in); 
     double budget, total = 0, expenseTotal = 0; 

     System.out.print("Enter your budget for the month: "); 
     budget = keyboard.nextDouble();   
     System.out.println("Type -99 to stop calculations"); 
     System.out.println(); 
     byte start = 1; 

     double expense = 0; 

     while (expense != -99) { 

      System.out.print("Enter expense " + start + " :"); 
      expense = keyboard.nextDouble(); 

      expenseTotal = expenseTotal + expense; 

      start++;    

     if (expense == -99) { 
      System.out.println(); 

      //total = (budget - expense) - 99; 
      total = (budget - expenseTotal) - 99; 
      System.out.printf("Your current total budget is: $%,.2f \n" , total); 
      } 
     } 
    } 
} 
0

Ваша проблема была переменная расход. Я сделал, если они набирают 0 не -99, просто потому, что мне больше нравится :).

while(true){ 
     System.out.print("Enter expense " + start + " :"); 
     double value = keyboard.nextDouble(); 
     if(value == 0){ 
      System.out.println(); 
      total = (budget - expense); 
      System.out.printf("Your current total budget is: $%,.2f \n", total); 
      break; 
     } 
     else{ 
      expense += value; 
      start++; 
     } 
    } 
Смежные вопросы