Hallo zusammen, ich hatte die Aufgabe, bei einer Datei welche ich schreibe die Sonderzeichen richtig anzuzeigen. Ich habe jetzt schon alles geschafft außer das Eurozeichen"€"... ich poste mal beide Versionen. Das Eurozeichen nimmt er nicht als Unicode(\u20AC) oder das Zeichen selber(€(alle anderen Sonderzeichen nimmt er jetzt sofort aus Variablen)) beides geht nicht... jmd eine Idee?
Quellcode aus der Aufgabenstellung:
Meine Version:
Quellcode aus der Aufgabenstellung:
Java:
/**
*Ravioli4
*
*Programm berechnet alles rund um Dosen.
*
*Diese Version ist eine benutzerfreundliche Version!
*Rundungen sind auf mm berücksichtigt.
*
*Folgenden Werte werden für eine Tastatur-Eingabe von Umfang und Höhe einer Dose
*berechnet und auf der Konsole UND in einer Datei ausgeben:
*
*• Den Durchmesser des Dosenbodens
*• Die Fläche des Dosenbodens
*• Die Mantelfläche der Dose
*• Die Gesamtfläche der Dose
*• Das Volumen der Dose
*
* @autor: J. M
* @version: 1.0, 16.11.2010
*/
// Import von Java-Klassenbibliotheken
import java.util.*; // für Scanner
import java.io.*;
import java.text.*; // für SimpleDateFormat
import sun.io.*;
public class Ravioli4 {
//Klassenvariablen
Scanner sc = new Scanner(System.in); // Scanner-Objekt erzeugen
// Konstruktor
public Ravioli4(){
final double PI = 3.141592; // Konstante
// Programmkopf
System.out.println();
System.out.println("************************************");
System.out.println("* *");
System.out.println("* Ravioli4 *");
System.out.println("* Textdateien verarbeiten *");
System.out.println("* *");
System.out.println("************************************");
System.out.println("Autor: J. M\n");
// Hinweis
System.out.println("\nAlle Angaben sind auf mm gerundet!\n");
// EINGABE
double u, h;
String inhalt;
System.out.print("\nGeben Sie den Umfang der Dose ein [cm]: ");
u = sc.nextDouble();
System.out.print("\nGeben Sie die Höhe der Dose ein [cm] : ");
h = sc.nextDouble();
System.out.print("\nGeben Sie den Inhalt der Dose an : ");
sc.nextLine(); // Anweisung, um das Prellen der Eingabe zu vermeiden.
inhalt = sc.nextLine();
System.out.println();
// VERARBEITUNG und AUSGABE
try // try-catch-Block
{
String fileName = inhalt + "_" + u + "_" + h + ".txt";
FileWriter fw = new FileWriter(fileName);
// Zeitstempel ermitteln
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
String datumUhrzeit = sdf.format(new Date());
// 1. Eintrag in die Datei
fw.write("Ravioli4\r\n\r\n");
fw.write("Erstelldatum: " + datumUhrzeit + "\r\n\r\n");
// Ausgabe der Eingabedaten
fw.write("Eingabedaten:\r\n");
fw.write("Umfang der Dose: " + (double)Math.round(u*10)/10 + " [cm]\r\n");
fw.write("Hoehe der Dose : " + (double)Math.round(h*10)/10 + " [cm]\r\n");
fw.write("Inhalt der Dose: " + inhalt + "\r\n");
fw.write("\r\n");
// Ausgabe der berechneten Werte
String ausgabe = "";
System.out.println("\nBerechnete Werte:\n");
fw.write("Berechnete Werte:\r\n");
// Berechnungen:
// Durchmesser berechnen [Umfang geteilt durch PI]
double durchmesser = u / PI;
durchmesser = (double)Math.round(durchmesser * 10) / 10;
System.out.println("Durchmesser des Dosenbodens : " + durchmesser + "\t[cm]");
fw.write("Durchmesser des Dosenbodens : " + durchmesser + "\t[cm]\r\n");
// Fläche des Dosenbodens berechnen [d^2*PI/4 oder d*U/4]
double flaecheDosenboden = durchmesser*u*PI/4;
flaecheDosenboden = (double)Math.round(flaecheDosenboden * 10 ) / 10;
System.out.println("Fläche des Dosenbodens : " + flaecheDosenboden+ "\t[cm\u00B2]");
fw.write("Fläche des Dosenbodens : " + flaecheDosenboden+ "\t[cm\u00B2]\r\n");
// Mantelfläche der Dose berechnen [Umfang mal Höhe]
double mantelFlaeche = u * h;
mantelFlaeche = (double)Math.round(mantelFlaeche * 10 ) / 10;
System.out.println("Mantelfläche der Dose : " + mantelFlaeche + "\t[cm\u00B2]");
fw.write("Mantelfläche der Dose : " + mantelFlaeche + "\t[cm\u00B2]\r\n");
// Gesamtfläche berechnen (2 mal Fläche des Dosenbodens plus Mantelfläche)
double gesamtFlaeche = mantelFlaeche + 2 * flaecheDosenboden;
gesamtFlaeche = (double)Math.round(gesamtFlaeche * 10 ) / 10;
System.out.println("Gesamtfläche der Dose : " + gesamtFlaeche + "\t[cm\u00B2]");
fw.write("Gesamtfläche der Dose : " + gesamtFlaeche + "\t[cm\u00B2]\r\n");
// Volumen der Dose berechnen (Grundfläche mal Höhe)
double volumen = flaecheDosenboden * h;
volumen = (double)Math.round(volumen * 10 ) / 10;
System.out.println("Volumen der Dose : " + volumen + "\t[cm\u00B3]");
fw.write("Volumen der Dose : " + volumen + "\t[cm\u00B3]\r\n");
fw.close();
System.out.println("\n\nDie Datei " + fileName +
" wurde erzeugt und abgelegt.");
System.out.println("\nDas Programm wurde beendet...\n");
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
//main-Methode
public static void main (String[] args) {
new Ravioli4();
}
}
Meine Version:
Java:
/**
*Ravioli4
*
*Programm berechnet alles rund um Dosen.
*
*Diese Version ist eine benutzerfreundliche Version!
*Rundungen sind auf mm berücksichtigt.
*
*Folgenden Werte werden für eine Tastatur-Eingabe von Umfang und Höhe einer Dose
*berechnet und auf der Konsole UND in einer Datei ausgeben:
*
*• Den Durchmesser des Dosenbodens
*• Die Fläche des Dosenbodens
*• Die Mantelfläche der Dose
*• Die Gesamtfläche der Dose
*• Das Volumen der Dose
*
* @autor: J. M
* @version: 1.0, 16.11.2010
*/
// Import von Java-Klassenbibliotheken
import java.util.*; // für Scanner
import java.io.*;
import java.text.*; // für SimpleDateFormat
import sun.io.*;
public class Ravioli4 {
//Klassenvariablen
Scanner sc = new Scanner(System.in); // Scanner-Objekt erzeugen
// Konstruktor
public Ravioli4(){
final double PI = 3.141592; // Konstante
// Programmkopf
System.out.println();
System.out.println("************************************");
System.out.println("* *");
System.out.println("* Ravioli4 *");
System.out.println("* Textdateien verarbeiten *");
System.out.println("* *");
System.out.println("************************************");
System.out.println("Autor: J. M\n");
// Hinweis
System.out.println("\nAlle Angaben sind auf mm gerundet!\n");
// EINGABE
double u, h;
String inhalt;
System.out.print("\nGeben Sie den Umfang der Dose ein [cm]: ");
u = sc.nextDouble();
System.out.print("\nGeben Sie die Höhe der Dose ein [cm] : ");
h = sc.nextDouble();
System.out.print("\nGeben Sie den Inhalt der Dose an : ");
sc.nextLine(); // Anweisung, um das Prellen der Eingabe zu vermeiden.
inhalt = sc.nextLine();
System.out.println();
// VERARBEITUNG und AUSGABE
try // try-catch-Block
{
String fileName = inhalt + "_" + u + "_" + h + ".txt";
File f = new File (fileName);
OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
BufferedWriter writer = new BufferedWriter(w);
// Zeitstempel ermitteln
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
String datumUhrzeit = sdf.format(new Date());
// 1. Eintrag in die Datei
writer.write("Ravioli4\r\n\r\n");
writer.write("Erstelldatum: " + datumUhrzeit + "\r\n\r\n");
// Ausgabe der Eingabedaten
writer.write("Eingabedaten:\r\n");
writer.write("Umfang der Dose: " + (double)Math.round(u*10)/10 + " [cm]\r\n");
writer.write("Hoehe der Dose : " + (double)Math.round(h*10)/10 + " [cm]\r\n");
writer.write("Inhalt der Dose: " + inhalt + "\r\n");
writer.write("\r\n");
// Ausgabe der berechneten Werte
String ausgabe = "";
System.out.println("\nBerechnete Werte:\n");
writer.write("Berechnete Werte:\r\n");
// Berechnungen:
// Durchmesser berechnen [Umfang geteilt durch PI]
double durchmesser = u / PI;
durchmesser = (double)Math.round(durchmesser * 10) / 10;
System.out.println("Durchmesser des Dosenbodens : " + durchmesser + "\t[cm]");
writer.write("Durchmesser des Dosenbodens : " + durchmesser + "\t[cm]\r\n");
// Fläche des Dosenbodens berechnen [d^2*PI/4 oder d*U/4]
double flaecheDosenboden = durchmesser*u*PI/4;
flaecheDosenboden = (double)Math.round(flaecheDosenboden * 10 ) / 10;
System.out.println("Fläche des Dosenbodens : " + flaecheDosenboden+ "\t[cm\u00B2]");
writer.write("Fläche des Dosenbodens : " + flaecheDosenboden+ "\t[cm²]\r\n");
// Mantelfläche der Dose berechnen [Umfang mal Höhe]
double mantelFlaeche = u * h;
mantelFlaeche = (double)Math.round(mantelFlaeche * 10 ) / 10;
System.out.println("Mantelfläche der Dose : " + mantelFlaeche + "\t[cm\u00B2]");
writer.write("Mantelfläche der Dose : " + mantelFlaeche + "\t[cm\u00B2]\r\n");
// Gesamtfläche berechnen (2 mal Fläche des Dosenbodens plus Mantelfläche)
double gesamtFlaeche = mantelFlaeche + 2 * flaecheDosenboden;
gesamtFlaeche = (double)Math.round(gesamtFlaeche * 10 ) / 10;
System.out.println("Gesamtfläche der Dose : " + gesamtFlaeche + "\t[cm\u00B2]");
writer.write("Gesamtfläche der Dose : " + gesamtFlaeche + "\t[cm\u00B2]\r\n");
// Volumen der Dose berechnen (Grundfläche mal Höhe)
double volumen = flaecheDosenboden * h;
volumen = (double)Math.round(volumen * 10 ) / 10;
System.out.println("Volumen der Dose : " + volumen + "\t[cm\u00B3]");
writer.write("Volumen der Dose : " + volumen + "\t[cm\u00B3]\r\n");
writer.close();
System.out.println("\n\nDie Datei " + fileName +
" wurde erzeugt und abgelegt.");
System.out.println("\nDas Programm wurde beendet...\n");
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
//main-Methode
public static void main (String[] args) {
new Ravioli4();
}
}
Zuletzt bearbeitet: