confusión sobre el bucle while

Apenas estoy empezando a aprender mi primer lenguaje de programación a partir de ayer, así que estoy escribiendo programas de prueba simples de mi libro de Java.

Lo que intento hacer es que un usuario ingrese una inversión mensual estática y para cuántos meses ahorrará, luego muestre sus ahorros totales después de ese período de tiempo.

cuando compilo el programa dice que en system.out.println al final del programa ese total no se ha inicializado. Intenté inicializar el total solo en el bucle, pero pensé que eso pondría el alcance del mismo en el bucle, así que intenté inicializarlo en la parte superior y pensé que se ejecuta a través del bucle hasta que se cumpla la condición, pero no vuelva al parte superior del programa para volver a poner el valor, así que hago otra variable al final del ciclo para mantener el total al final del ciclo. ¿Qué hay de malo en mi lógica?

¡gracias por la ayuda!

import java.util.Scanner;

public class CompoundInterestSteadyRate {

public static void main(String[] args){ 
Scanner input = new Scanner(System.in);


double monthlyInterestRate = (1 + 0.00417);

System.out.println("please enter amount saved each mounth");

double amountSavedMonthly = input.nextDouble();

System.out.println("please enter amount of months you will be saving for");
int amountOfMonthsSaved = input.nextInt();

int monthCountDown = amountOfMonthsSaved;

double totalAmount;
double addMonths;
double intitalAmount = 0;
while (monthCountDown > 0){

    addMonths = amountSavedMonthly * monthlyInterestRate + intitalAmount;

    intitalAmount = addMonths;

      totalAmount = intitalAmount;

}
double total = totalAmount;
System.out.println("your total after " + " " + amountOfMonthsSaved + " " + "months is:" + " " + "$" + total);
}

}

gracias a todos por la ayuda que ahora compila, sin embargo, parece que cuando revisan las matemáticas no tienen en cuenta el primer mes de ahorro, por ejemplo, si hago $ 100 cada mes, su total al final es% 502.08, lo cual no creo es correcto

import java.util.Scanner;

public class CompoundInterestSteadyRate {

public static void main(String[] args){ 
Scanner input = new Scanner(System.in);


double monthlyInterestRate = (1 + 0.00417);

System.out.println("please enter amount saved each mounth");

double amountSavedMonthly = input.nextDouble();

System.out.println("please enter amount of months you will be saving for");
int amountOfMonthsSaved = input.nextInt();

int monthCountDown = amountOfMonthsSaved;

double totalAmount = 0;
double addMonths;
double intitalAmount = 0;
while (monthCountDown > 1){

    addMonths = amountSavedMonthly * monthlyInterestRate + intitalAmount;

    intitalAmount = addMonths;

      totalAmount = intitalAmount;

    monthCountDown = monthCountDown - 1;
}
double total = totalAmount;
System.out.println("your total after " + " " + amountOfMonthsSaved + " " + "months is:" + " " + "$" + total);
Respuesta 1

conjunto totalAmount = 0,que lo inicializará, avíseme si esto soluciona el problema

cuando lo declaras lo declaras así double totalAmount = 0;

Respuesta: 2

prueba 2 pasos:

  1. double totalAmount; ==> double totalAmount = 0;
  2. while (monthCountDown > 0); ==> while (monthCountDown-- > 0);

Buen día, amigo mío.

Respuesta: 3

Este problema es un poco complejo aunque el compilador ( javacprograma) proporciona el siguiente mensaje útil:

Compound.java:33: error: la variable totalAmount podría no haberse inicializado double total = totalAmount;

¿Qué podría estar sucediendo? La respuesta fácil es ir a la línea 20 de su programa e inicializar el valor de totalAmountto 0. Entonces su programa se compilaría.

La razón por la que el compilador lo hace es bastante complicada, pero puede razonar sobre esto de esta manera:

¿Qué pasa si, solo qué pasa si el whileciclo no se ejecutó ni siquiera una vez (como está escrito, en su programa, sucede lo contrario ya que pronto descubrirá que está olvidando algo sobre la variable del ciclo )? Entonces Java ejecutaría la (siguiente) declaración double total = totalAmount;y la forma en que se ejecuta esta declaración de asignación es más o menos así:

  • lea la variable en el lado derecho de =, que está totalAmounten una ubicación temporal
  • transferir los contenidos de esa ubicación a la memoria para la variable en el lado izquierdo de =, es decir total.

Ahora, a Java no le gusta leer el valor de una variable local (como totalAmount) en el que nunca se escribe porque puede contener algún valor basura . Cuando lo inicializa con un valor como 0, este problema desaparece.

Respuesta: 4

En primer lugar, no es necesario usar intitalAmount y totalAmount. Porque cada vez que les inserta los mismos valores. En segundo lugar si haces

monthCountdown > 1

entonces contará un mes menos. Porque supongamos que estás contando durante 6 meses. Ahora para el mes Cuenta atrás> 1, el ciclo iterará 5 veces y calculará el interés 5 veces. Lo que creo que no es la lógica que desea implementar. Entonces debería ser,

monthCountdown > 0

Por último, su lógica matemática no es correcta porque cada vez que calcula el interés sobre el valor mensual y lo agrega al saldo anterior. Pero debería ser como cada vez que se debe calcular el interés sobre el saldo actual total.

while (monthCountDown > 0){    
        totalAmount = ( amountSavedMonthly + totalAmount ) * monthlyInterestRate;
}

Por favor, avíseme si tiene alguna inquietud.

Respuesta: 5

En primer lugar, no es necesariamente el caso que totalAmountno se inicializará. Sin embargo, dependiendo de la entrada del usuario, es POSIBLE que totalAmountno se haya inicializado, lo que arrojará una excepción cuando el programa intente asignar el valor de totalAmounta total. Para evitar esto, debe asegurarse de que totalAmountse inicialice, lo cual es fácil de hacer. Cuando declare totalAmount, simplemente asigne 0como su valor.

También tienes un problema con tu whilebucle. Debido a que el valor de monthCountDownnunca cambia dentro del ciclo, no hay forma de que la condición se monthCountDown > 0convierta false. Supongo que tiene la intención de monthCountDownreducirse en 1 cada vez que se ejecuta el ciclo, por lo que debe incluir monthCountDown--;dentro del ciclo para evitar que se convierta en un ciclo infinito.

Respuesta: 6

Inicializar totalAmount a 0 ...

Hacer en condición de más de 1 ..

Respuesta: 7

He tratado de mantener mi JTable apretada y segura, haciendo que solo las columnas editables sean editables a través de isCellEditable (). Sin embargo, mis clientes insisten en que desean hacer doble clic en una celda para que puedan ...

Quiero almacenar en caché algunas partes de mi página JSP porque es pesado de renderizar. No se puede almacenar en caché toda la página, ya que contiene contenido específico para el usuario, pero la mayoría sí. Pensé que la mejor solución sería ...

Tengo un mapa: Map <String, Integer> myMap = new HashMap <String, Integer> (); Ahora he agregado algunos valores: myMap.put ("east", generateId ()); myMap.put ("oeste", generateId ()); myMap.put ("...

Cito del Capítulo 3 de Herbert Schildt Tipos de datos, variables y matrices: los tipos primitivos representan valores únicos, no objetos complejos. Aunque Java está completamente orientado a objetos, ...