2015-10-11 2 views
-3

, поэтому у меня есть упражнение из колледжа, чтобы закончить, и я считаю, что я близко к нему, но пока что. Я не прошу конкретного ответа, мне бы хотелось знать, как «перезаписать переменную»? (не уверен, что это правильное название для такого рода действий).странные выходы программ, слишком глупый, чтобы решить: c

Вот вопрос: http://pastebin.com/riDYS39D

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

и код, любая помощь всегда приветствуется

import java.util.Scanner; 



public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    double grossPaid, allowance1, allowance2, totalTaxPaid, netPay, grossAfterAllowance; 
    double taxSaved; 
    final double GROSSRATIO; 
    String idNumber, name, address, strln; 
    char maritalStatus; 
    allowance1 = 25000; 
    allowance2 = 20000; 
    GROSSRATIO = 500000; 

    taxSaved = 0.00; 




    /* trash 
    grossAfterAllowance = grossPaid - allowanceGiven; 
    totalTaxPaid = grossAfterAllowance - netPay; 
    */ 


    System.out.println("Enter your employee identification number: "); 
    idNumber = input.nextLine(); 

    System.out.println("Enter your name: "); 
    name = input.nextLine(); 

    System.out.println("Enter your address: "); 
    address = input.nextLine(); 

    System.out.println("Enter your marital status: "); 
    strln = input.next(); 
    maritalStatus = strln.charAt(0); 
     if (maritalStatus == 'S')                           
      taxSaved = 0.20; 

     if (maritalStatus == 'M') 
      taxSaved = 0.23; 





    System.out.println("Enter your gross payment: "); 
    grossPaid = input.nextDouble(); 
     if (grossPaid < GROSSRATIO) 
     netPay = (grossPaid - allowance1) * taxSaved; 

     if (grossPaid >= GROSSRATIO) 
     netPay = (grossPaid - allowance2) * taxSaved; 




    System.out.println(maritalStatus); 
    netPay = (grossPaid * maritalStatus); 
    System.out.println("Name: " + name); 
    System.out.println("ID: " + idNumber); 
    System.out.println("Address: " + address); 
    System.out.println("Marital Status: " + strln); 
    System.out.println("Gross Payment: " + grossPaid); 
    System.out.println("Net pay: " + netPay); 



    } 

}

+0

является переменной taxSaved? –

+0

@domfarr yes sir – thedumbone

+0

umm .. но taxSaved не создан в инструкции if? – eis

ответ

1

Учитывая ваш первый вход переменной idNumber, это то, как вы перезаписать переменную:

String idNumber = ""; 
System.out.println("Enter your employee identification number: "); 
idNumber = input.nextLine(); 
System.out.println("ID Number: " + idNumber); 

System.out.println("Enter your updated employee identification number: "); 
idNumber = input.nextLine(); 
System.out.println("Updated ID Number: " + idNumber); 
+0

вы не читали мой вопрос: «Я не знаю, как перезаписать данные в переменной, которая была создана в выражении if». i.e taxSaved – thedumbone

+0

Умм ... он не был создан в выражении 'if'. Ему было присвоено значение, и я думаю, вы все равно можете перезаписать его любым значением, которое хотите, в чем проблема? –

0

Вы сказали «любая помощь всегда приветствуется», так вот мой анализ вашего кода.

Это общая практика, чтобы объявить переменные как можно ближе к их использованию, как это возможно, чаще всего это означает, что, когда первый назначен, например .:

String address = input.nextLine(); 

Семейное положение должно быть в нижнем регистре 's' или 'm'. Вы должны использовать nextLine() и проверить его, например.

char maritalStatus; 
do { 
    System.out.println("Enter your marital status (s/m):"); 
    String line = input.nextLine(); 
    maritalStatus = (line.length() == 1 ? line.charAt(0) : '?'); 
} while (maritalStatus != 's' && maritalStatus != 'm'); 

Ваш GROSSRATIO должен быть 50000, не 500000.

Вы несовместимы в использовании констант.

  • GROSSRATIO является прописным и окончательным. Отлично!
  • allowance1 и allowance2 являются строчными буквами и не являются окончательными.
  • 0.20 и 0.23 не называются константами.

maritalStatus является char, так что эта строка компилирует, но, безусловно, не то, что вы хотите, и является причиной ваших «странных выходов». Просто удалите строку:

netPay = (grossPaid * maritalStatus); 

Вы также печать maritalStatus сама по себе без этикетки. Убери это.

У вас есть два оператора if для назначения netPay, которые являются противоположностями, но компилятор этого не видит, поэтому netPay определенно не назначен. Просто измените второе заявление if на номер else.

totalTaxPaid и grossAfterAllowance не используются. Удалить их.

Расчет netPay фактически вычисляет totalTax.

Вы не печатаете весь требуемый выход.

+0

Хорошо, поэтому я меняю некоторые вещи, я не могу использовать «делать, пока» и т. Д., Потому что у нас еще не было лекций: v, похоже, сейчас работает http://pastebin.com/RvHDsX28 спасибо ! – thedumbone

Смежные вопросы