2012-06-24 13 views
5

Estoy escribiendo un programa que permite a las lecturas de la temperatura de entrada del usuario 6, y luego o bien el retornoString.Format para el redondeo, no se puede localizar el error fuente de conversión de formato ilegal?

  1. los más altos valores originales + versión centígrados
  2. devolver los valores originales + conversión en la versión centígrados.

el código donde se establecen los valores de las matrices está aquí:

System.out.print("Enter Temperature:\t"); //Get the count... 
     Temp = LocalInput.nextInt(); 
     WeatherSpots[K].CatchCount = Temp; 

el mensaje de error que me sale es este

java.util.IllegalFormatConversionException: f != java.lang.Integer 
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) 
at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) 
at java.util.Formatter$FormatSpecifier.print(Unknown Source) 
at java.util.Formatter.format(Unknown Source) 
at java.util.Formatter.format(Unknown Source) 
at java.lang.String.format(Unknown Source) 
at p2list.WeeklyReport(p2list.java:102) 
at p2list.main(p2list.java:33)" 

También he encontrado la frase exacta que me da problema:

String.format("%.2d", (WeatherSpots[K].CatchCount - 32) * 5/9)" 

sé que el error ocurre cuando mi "%._" no tiene el especificador derecha, pero todos mis variables y matrices están en int, por lo que d deben estar trabajando

aquí está el resto del código:

Así es como me puse la primera matriz:

private static WeatherLocation[] WeatherSpots = new WeatherLocation[6];" 

Esta es la clase que las matrices posteriores utilizan

public class WeatherLocations extends WeatherLocation { 
    public String LocationID; 
    public Integer CatchCount;" 

    arrays = WeatherSpots.LoccationID/Catchcount" 

Aquí es donde la matriz catchcount se establece con las temperaturas de entrada de usuario

int K; 
for(K = 0 ; K < 6 ; K++){ 
    System.out.print("Enter Temperature:\t"); 
    Temp = LocalInput.nextInt(); 
    WeatherSpots[K].CatchCount = Temp; 

Aquí está el método en el que intento hacer un llamamiento a los WeatherSpots[K].catchcount valores para convertir a celcius

int K= 0; 
for(K = 0 ; K < 6 ; K++){ 
    System.out.println("" + WeatherSpots[K].LocationID +"\t\t" + WeatherSpots[K].CatchCount + "\t\t" + String.format("%.2f", (WeatherSpots[K].CatchCount - 32) * 5/9)); 

Lo que se ha provocado el error, si mis matrices y variables son los tipos adecuados para el uso de string.format?

Respuesta

8

En

String.format("%.2f", (WeatherSpots[K].CatchCount - 32) * 5/9) 

que está intentando imprimir un int con un formato para double s o float s. Eso causa el IllegalFormatConversionException: f != java.lang.Integer. Como la división entera trunca de todos modos, no es muy útil imprimir un entero con dos lugares después del punto decimal. Simplemente divida por el número de punto flotante 9.0 en lugar del int 9 para obtener un número de punto flotante que puede formatear con %.2f.

En su

String.format("%.2d", (WeatherSpots[K].CatchCount - 32) * 5/9) 

el formato %.2d no es válido, ya que no tiene sentido para imprimir números enteros con lugares después de la coma decimal.

+0

gracias!eso resolvió todo – user1476390

+1

@ user1476390: Como esta respuesta resolvió tu problema, debes votar la respuesta de Daniel (como lo he hecho) haciendo clic en la flecha hacia arriba a la izquierda, y luego debes aceptarla haciendo clic en gran marca de verificación a la izquierda de ella. –

+0

oh bien. lo siento Daniel, no puedo votar todavía – user1476390

Cuestiones relacionadas