2017-10-04 3 views
-2

MISE À JOUR: Je n'ai jamais résolu mon problème avec la sortie de la date dans le format spécifique requis, mais le reste du programme fonctionne. Après avoir joué avec la classe time.format, j'ai trouvé plusieurs méthodes différentes de sortie de la date dans différents formats et j'ai réussi à les faire fonctionner à l'exception du dernier dans la liste qui est supposé faire partie de la classe time.format mais malheureusement je n'ai jamais été capable de comprendre comment l'implémenter. Cependant, c'est un bon exemple (à mon avis) d'un programme simple pour calculer l'intérêt. J'ai lu beaucoup de critiques sur les getters et les setters, mais ils semblaient fonctionner très bien pour ce programme. Veuillez noter que j'apprends toujours Java et la programmation dans son ensemble.Comment imprimer la date et l'heure spécifiques avec les getters et les setters

package accountproject; 

// two imports needed for date and time 
import java.time.format.*; 
import java.time.*; 
// import standard exception error text 
import java.text.ParseException; 
// import EVERYTHING! 
import java.util.*; 

public class Account { 

private static int id = 0; 
private static double balance = 0; 
private static double annualInterestRate = 0; 
private static ZonedDateTime dateCreated; 
private static double MonthlyInterestRate = annualInterestRate/12; 

public Account() 
{ 
    // empty constructor 
} 

public Account(int id, double balance, double annualInterestRate, ZonedDateTime dateCreated) { 
    super(); 
    Account.id = 0; 
    Account.balance = 0; 
    Account.annualInterestRate = 4.5; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    Account.id = id; 
} 

public static double getBalance(double d) { 
    return balance; 
} 

public void setBalance(double balance) { 
    Account.balance = balance; 
} 

public double getAnnualInterestRate() { 
    return annualInterestRate; 
} 

public void setAnnualInterestRate(double annualInterestRate) { 
    Account.annualInterestRate = annualInterestRate; 
} 

public static ZonedDateTime ConvertStringToDate(String dateNow) { 
    try 
{ 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
    ZonedDateTime date = ZonedDateTime.parse(dateNow, formatter); 

    return date; 
} 
catch (DateTimeParseException e) 
{ 
    System.out.println(e); 
} 
    ZonedDateTime date = null; 
    return date; 
} 

public static double getMonthlyInterestRate(double annualInterestRate2) { 

    double temp = annualInterestRate2/12; 

    MonthlyInterestRate = temp; 

    return MonthlyInterestRate; 
} 

public static double getMonthlyInterest(double newBalance2) { 

    double temp = 100/MonthlyInterestRate; 

    double temp2 = newBalance2/temp; 

    double temp3 = newBalance2 + temp2; 

    newBalance2 = temp3; 

    return temp2; 
} 

public static double deposit(double balance, double deposit) { 

    double temp = balance + deposit; 

    balance = temp; 

    return balance; 
} 

public static double withdrawal(double balance, double withdrawal) { 

    double temp = balance - withdrawal; 

    balance = temp; 

    return balance; 
} 

    public static void main(String[] args) throws ParseException { 

     // establish a scanner and set example values 
     Scanner stdin = new Scanner(System.in); 
     id = 1122; 
     balance = 20000; 
     MonthlyInterestRate = .375; 
     double withdrawal = 2500; 
     double deposit = 3000; 

     double balanceExp = deposit(balance,deposit); 
     balanceExp = withdrawal(balanceExp,withdrawal); 
     double balanceExp2 = getMonthlyInterest(balanceExp); 
     double monthlyInterest = balanceExp2; 

     String dateExp = "Fri Oct 06 16:10:59 GMT 2017"; 
     dateCreated = ConvertStringToDate(dateExp); 

     System.out.println("SAMPLE: Account ID " + id + " with a balance of $" + balanceExp 
       + ",\nhas accrued $" + monthlyInterest + " in interest and was opened on " 
       + dateCreated + "."); 

     System.out.println("Please enter the ID number:"); 

     // get the id number input 
     id = stdin.nextInt(); 
     stdin.nextLine(); 

     System.out.println("Typically, the original balance will be $20,000.00.\nPlease enter the balance:"); 

     // get the starting balance input 
     balance = stdin.nextInt(); 
     stdin.nextLine(); 

     double newBalance = balance; 

     Account.getBalance(20000.00); 

     System.out.println("Please enter the deposit amount:"); 

     // ensure deposit is set to 0 before getting input 
     deposit = 0.00; 

     // get the deposit amount from input 
     deposit = stdin.nextDouble(); 
     stdin.nextLine(); 

     newBalance = deposit(balance, deposit); 

     System.out.println("Please enter the withdrawal amount:"); 

     // ensure withdrawal is set to 0 before getting input 
     withdrawal = 0.00; 

     // get the deposit amount from input 
     withdrawal = stdin.nextDouble(); 
     stdin.nextLine(); 

     double newBalance2 = withdrawal(newBalance, withdrawal); 
     double newBalance3 = getMonthlyInterest(newBalance2); 
     double MonthlyInterest = newBalance3; 

     print(id, newBalance2, MonthlyInterest, dateCreated); 

     stdin.close(); 
    } 

    public static void print(int id, double newBalance2, double MonthlyInterest, ZonedDateTime dateCreated2) 
    { 
      System.out.println("To verify: the Account ID is " + id + " with a balance of $" + newBalance2 
        + ",\nhas accrued $" + MonthlyInterest + " in interest, and was opened on " + dateCreated2 + "."); 
    } 
} 
+0

Vous utilisez des anciennes classes de date-heure problématiques qui sont maintenant héritées, supplantées par les classes java.time. Évitez 'Date' &' Calendar'; utilisez 'Instant' &' ZonedDateTime'. En outre, n'utilisez pas les types à virgule flottante pour les questions d'argent; utilisez 'BigDecimal'. Enfin, recherchez Stack Overflow avant de poster. Toutes les questions de base de date-heure ont été posées et ont répondu. –

+0

Merci pour les pointeurs. La raison pour laquelle je pose les questions est parce que j'ai du mal à trouver les réponses d'une manière qui me semble logique. J'ai passé plus d'un an à chercher sur ce site des réponses à diverses questions de codage parce que tous mes professeurs enseignent les principes du code et non le code lui-même. C'est un sujet douloureux pour moi car je peux comprendre les idées en anglais et même le pseudo code mais ils traitent tous le code lui-même comme si c'était un secret du gouvernement. Si vous ne voulez pas répondre à la question, alors ne le faites pas, il n'y a aucune raison d'être impoli. –

+0

Le vrai problème est que les recherches sur les flux de données ne filtrent pas les anciennes questions de la version et que les nouveaux utilisateurs reçoivent des réponses qui ne fonctionnent plus ou qui sont dépréciées. –

Répondre

0

Je crois que le problème est avec cette ligne dans main.

withdrawl(balance, withdrawl); 

Vous devez affecter la valeur renvoyée d'une méthode à une variable.

double currentBalance = withdrawl(balance, withdrawl); 
print(id, currentBalance, MonthlyInterestRate, dateCreated); 
+0

Merci beaucoup, je savais que c'était quelque chose de simple, je ne pouvais tout simplement pas y penser. Ça marche. –

0

J'ai passé beaucoup de temps à réapprendre cela moi-même. Je ne savais pas java 8 avait new java.time

Il ya une tonne de changements ici. Hope this helps tous les changements sont commentés dans le code

import java.time.format.*; 
import java.time.*; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.*; 

public class Account { 

private static int id = 0; 
private static double balance = 0; 
private static double annualInterestRate = 0; 
private static Date dateCreated; 
private static double MonthlyInterestRate = annualInterestRate/12; 


public Account() 
{ 
    // empty constructor 
} 

/** 
* @param id 
* @param balance 
* @param annualInterestRate 
* @param dateCreated 
* regular constructors 
*/ 

public Account(int id, double balance, double annualInterestRate, Date dateCreated) { 
    super(); 
    Account.id = 0; 
    Account.balance = 0; 
    Account.annualInterestRate = 4.5; 
    Account.dateCreated = dateCreated; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    Account.id = id; 
} 

public static double getBalance(double d) { 
    return balance; 
} 

public void setBalance(double balance) { 
    Account.balance = balance; 
} 

public double getAnnualInterestRate() { 
    return annualInterestRate; 
} 

public void setAnnualInterestRate(double annualInterestRate) { 
    Account.annualInterestRate = annualInterestRate; 
} 

public static LocalDate ConvertStringToDate(String dateNow) { 
    try 
{ 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM d yyyy", Locale.ENGLISH); 
    LocalDate date = LocalDate.parse(dateNow, formatter); 
    System.out.println(date); 
    return date; 
} 
catch (DateTimeParseException e) 
{ 
    System.out.println(e); 
} 
LocalDate date = null; 
return date; 



} 



public static double getMonthlyInterestRate(double annualInterestRate2) { 

    double temp = annualInterestRate2/12; 

    MonthlyInterestRate = temp; 

    return MonthlyInterestRate; 

} 

public double getMonthlyInterest() { 

    double temp = 100/annualInterestRate; 

    double temp2 = getBalance(0)/temp; 

    double temp3 = balance + temp2; 

    System.out.println(temp3); 

    return temp3; 

} 

public static double deposit(double balance, double deposit) { 

    double temp = balance + deposit; 

    balance = temp; 

    return balance; 
} 

public static double withdrawl(double balance, double withdrawl) { 

    double temp = balance - withdrawl; 

    balance = temp; 

    return balance; 
} 

    public static void main(String[] args) throws ParseException { 
     //create Scanner 1 time. no need to create over and over 
     Scanner stdin = new Scanner(System.in); 
     id = 1122; 
     balance = 20000; 
     MonthlyInterestRate = .375; 

     System.out.println("SAMPLE: Account ID " + id + " with a balance of " + balance + " " 
       + "and a monthly interest rate of " + MonthlyInterestRate + " opened on " + 
       dateCreated + "."); 

     System.out.println("Please enter the ID number:"); 

     id = stdin.nextInt(); 
     // consume the /n 
     stdin.nextLine(); 

     System.out.println("Typically, the original balance will be $20,000.00.\nPlease enter the balance:"); 



     balance = stdin.nextInt(); 
     // consume the /n 
     stdin.nextLine(); 

     double newBalance = balance; 

     Account.getBalance(20000.00); 

     System.out.println("Please enter the date created like: MM d yyyy"); 


     // assign your string to your scanned object 
     String dateNow = stdin.nextLine(); 
     //catch your returned date 
     LocalDate dateCreated = ConvertStringToDate(dateNow); 

     System.out.println("Please enter the deposit amount:"); 



     double deposit = 0.00; 

     deposit = stdin.nextDouble(); 
     // consume the /n 
     stdin.nextLine(); 

     newBalance = deposit(balance, deposit); 

     System.out.println("Please enter the withdrawl amount:"); 



     double withdrawl = 0.00; 

     withdrawl = stdin.nextDouble(); 
     // consume the /n 
     stdin.nextLine(); 

     double newBalance2 = withdrawl(newBalance, withdrawl); 

     double annualInterestRate2 = 4.5; 

     double MonthlyInterestRate2 = getMonthlyInterestRate(annualInterestRate2); 

     // pass your local date 
     print(id, newBalance2, MonthlyInterestRate2, dateCreated); 
    } 

    public static void print(int id, double balance, double MonthlyInterestRate2, LocalDate dateCreated) 
    { 
      System.out.println("To verify: the Account ID is " + id + " with a balance of $" + balance + " " 
        + "and a monthly interest rate of " + MonthlyInterestRate2 + "% opened on " + 
        dateCreated + "."); 
    } 
} 
+0

Quelle est la partie de ce code dur et ce qui est spécifique au programme? évidemment les ints et la chaîne sont, mais la première ligne je ne suis pas sûr quelles sont les variables et qui sont la syntaxe. ma méthode get est getDateCreated avec dateCreated comme variable, serait-ce DateCreated2 = new dateCreated? Je n'ai pas accès à mon code pour le moment. –

+0

J'ai raté la lecture de la question. Je pensais que vous vouliez prendre un datatype de date et le convertir en morceaux de cordes. –

+0

https://stackoverflow.com/questions/6510724/how-to-convert-java-string-to-date-object –

0

je n'ai jamais savoir exactement comment définir la mise en forme pour obtenir la date de la façon dont mon professeur voulait, mais je suis arrivé à 100%, je pense que oui à la fin il n'avait pas tellement d'importance. Merci à Jérémie Stillings, j'apprécie toute l'aide. C'est ce que j'ai fini par:

package accountproject; 

// two imports needed for date and time 
import java.time.format.*; 
import java.time.*; 
// import standard exception error text 
import java.text.ParseException; 
// import EVERYTHING! 
import java.util.*; 

public class Account { 

private static int id = 0; 
private static double balance = 0; 
private static double annualInterestRate = 0; 
private static ZonedDateTime dateCreated; 
private static double MonthlyInterestRate = annualInterestRate/12; 

public Account() 
{ 
    // empty constructor 
} 

/** 
* @param id 
* @param balance 
* @param annualInterestRate 
* @param dateCreated 
* regular constructors 
*/ 

public Account(int id, double balance, double annualInterestRate, ZonedDateTime dateCreated) { 
    super(); 
    Account.id = 0; 
    Account.balance = 0; 
    Account.annualInterestRate = 4.5; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    Account.id = id; 
} 

public static double getBalance(double d) { 
    return balance; 
} 

public void setBalance(double balance) { 
    Account.balance = balance; 
} 

public double getAnnualInterestRate() { 
    return annualInterestRate; 
} 

public void setAnnualInterestRate(double annualInterestRate) { 
    Account.annualInterestRate = annualInterestRate; 
} 

public static ZonedDateTime ConvertStringToDate(String dateNow) { 
    try 
{ 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
    ZonedDateTime date = ZonedDateTime.parse(dateNow, formatter); 

    return date; 
} 
catch (DateTimeParseException e) 
{ 
    System.out.println(e); 
} 
    ZonedDateTime date = null; 
    return date; 
} 

public static double getMonthlyInterestRate(double annualInterestRate2) { 

    double temp = annualInterestRate2/12; 

    MonthlyInterestRate = temp; 

    return MonthlyInterestRate; 
} 

public static double getMonthlyInterest(double newBalance2) { 

    double temp = 100/MonthlyInterestRate; 

    double temp2 = newBalance2/temp; 

    double temp3 = newBalance2 + temp2; 

    newBalance2 = temp3; 

    return temp2; 
} 

public static double deposit(double balance, double deposit) { 

    double temp = balance + deposit; 

    balance = temp; 

    return balance; 
} 

public static double withdrawal(double balance, double withdrawal) { 

    double temp = balance - withdrawal; 

    balance = temp; 

    return balance; 
} 

    public static void main(String[] args) throws ParseException { 

     // establish a scanner and set example values 
     Scanner stdin = new Scanner(System.in); 
     id = 1122; 
     balance = 20000; 
     MonthlyInterestRate = .375; 
     double withdrawal = 2500; 
     double deposit = 3000; 

     double balanceExp = deposit(balance,deposit); 
     balanceExp = withdrawal(balanceExp,withdrawal); 
     double balanceExp2 = getMonthlyInterest(balanceExp); 
     double monthlyInterest = balanceExp2; 

     String dateExp = "Fri Oct 06 16:10:59 GMT 2017"; 
     dateCreated = ConvertStringToDate(dateExp); 

     System.out.println("SAMPLE: Account ID " + id + " with a balance of $" + balanceExp 
       + ",\nhas accrued $" + monthlyInterest + " in interest and was opened on " 
       + dateCreated + "."); 

     System.out.println("Please enter the ID number:"); 

     // get the id number input 
     id = stdin.nextInt(); 
     stdin.nextLine(); 

     System.out.println("Typically, the original balance will be $20,000.00.\nPlease enter the balance:"); 

     // get the starting balance input 
     balance = stdin.nextInt(); 
     stdin.nextLine(); 

     double newBalance = balance; 

     Account.getBalance(20000.00); 

     System.out.println("Please enter the deposit amount:"); 

     // ensure deposit is set to 0 before getting input 
     deposit = 0.00; 

     // get the deposit amount from input 
     deposit = stdin.nextDouble(); 
     stdin.nextLine(); 

     newBalance = deposit(balance, deposit); 

     System.out.println("Please enter the withdrawal amount:"); 

     // ensure withdrawal is set to 0 before getting input 
     withdrawal = 0.00; 

     // get the deposit amount from input 
     withdrawal = stdin.nextDouble(); 
     stdin.nextLine(); 

     double newBalance2 = withdrawal(newBalance, withdrawal); 
     double newBalance3 = getMonthlyInterest(newBalance2); 
     double MonthlyInterest = newBalance3; 

     print(id, newBalance2, MonthlyInterest, dateCreated); 

     stdin.close(); 
    } 

    public static void print(int id, double newBalance2, double MonthlyInterest, ZonedDateTime dateCreated2) 
    { 
      System.out.println("To verify: the Account ID is " + id + " with a balance of $" + newBalance2 
        + ",\nhas accrued $" + MonthlyInterest + " in interest, and was opened on " + dateCreated2 + "."); 
    } 
}