2016-10-03 3 views
-3

Wenn Sie dieses Programm ausführen, werden Sie feststellen, dass die Tabelle, die die Celsius-Konvertierung anzeigt, funky aussieht. Was ich versucht habe, ist es, auf dem zehnten Platz anzuhalten. Ich würde wirklich jedes Feedback schätzen. Danke im Voraus.Zeichnung Floats und Kontrolle Dezimalstelle

Ausgang:

Output

import java.awt.*; 
import java.awt.event.*; 
import java.util.Arrays; 


public class Foo extends Frame 
{ 
    public Foo() 
    { 
     setTitle(" Fahrenheit To Celsius Chart"); 
     setSize(400, 600); 
     setVisible(true); 

     addWindowListener(
      new WindowAdapter() 
      { 
       public void windowClosing(WindowEvent e) 
       { 
        System.exit(0); 
       } 
      } 
     ); 
    } 

    public static void main(String[] args) 
    { 
     Foo chart = new Foo(); 
    } 

    public void paint (Graphics g) 
    { 
     for(int i = 0; i < 25; i++) 
     { 
      g.setColor(Color.BLACK); 
      g.setFont(new Font("SansSerif", Font.BOLD, 14)); 
      g.drawString("Fahrenheit", 70, 110); 
      g.drawString("Celsius", 200, 110); 

      int[] tempF = new int[25]; 
      int y = 100, x = 130; 
      int y1 = 215, x1 = 130; 
      tempF[0] = 0; 


      int counter = 0; 
      while(counter < 26) 
      { 
       int index = 0; 
       String Fahrenheit = String.valueOf(tempF[index]); 
       double tempC = (tempF[index] - 32) * (5/9.0); 
       String Celsius = String.valueOf(tempC); 
       String formatedCelcius = String.format("%.1f", tempC); 
       g.drawString(Fahrenheit, y, x); 
       g.drawString(Celsius, y1, x1); 
       x += 15; 
       x1 += 15; 
       tempF[index] += 10; 
       index++; 
       counter++; 
      } 
     } 
    } 
} 
+0

warum kommentieren Sie aus 'String formatedCelcius = String.format ("% 1f." Celsius);'? –

+0

Als ich es verließ, hat es aus irgendeinem Grund alles ausgeblendet. Das Programm lief und kompilierte, aber es zeigte überhaupt nichts. – DDKGM

+0

Bitte * zeigen Sie uns * die Ausgabe, die Sie erhalten und die Ausgabe, die Sie erwarten. Wir sollten Ihren Code nicht ausführen müssen, um das zu sehen. – Andreas

Antwort

0

Vielen Dank für Ihr Feedback. Ich habe die Lösung gefunden. Die Math-Klasse hat eine Funktion round(), die den Trick gemacht hat. Ich habe diese in und es das Problem behoben:

double tempC = (tempF[index] - 32) * (5/9.0); 
double c = Math.round(tempC); 

Danach ändert ich die richtige Ausgabe bekommen:

Final Output

Wieder danke Ihnen allen für Ihr Feedback.

Mit freundlichen Grüßen,

DDKGM

1

Der Code für die Temperaturen machen sollte wie folgt aussehen:

String Fahrenheit = String.valueOf(tempF[index]); 
double tempC = (tempF[index] - 32) * (5/9.0); 
String formattedCelcius = String.format("%.1f", tempC); 
g.drawString(Fahrenheit, y, x); 
g.drawString(formattedCelcius, y1, x1); 

in Ihrem Code Sie tat:

String.format("%.1f", Celsius); 

Statt:

String.format("%.1f", tempC); 

(Ich hoffe, dass der Unterschied klar ist) Die% f Formatspezifizierer erwartet ein Doppel Argument (wie tempC), aber sie wurden in einem String (Celsius)

Dies führt vorbei a java.util.IllegalFormatConversionException: f != java.lang.String (die Sie vielleicht nicht als Ausnahme gesehen haben, wurde in den Swing-Event-Thread geworfen), die den Rest der paint-Methode abgebrochen hat.

+0

Danke für die Klarstellung Erwin. Ich sehe genau, wovon du sprichst.Ich habe das Problem korrigiert und jetzt kompiliert es ohne den Fehler, aber es produziert immer noch die gleiche Ausgabe. Es scheint, als ob etwas im Code den Formataufruf umgeht. Ich bin mir nicht sicher was. – DDKGM

+0

Haben Sie auch diese Zeile geändert: 'g.drawString (formatiertCelcius, y1, x1);'? Sie müssen 'formatiertCelsius', nicht' Celsius' zeichnen –