Schiedermeier 1. Semester Übungsaufgabe Problem

Status
Nicht offen für weitere Antworten.

dandY

Mitglied
hallo, wir müssen immer ein paar übungen machen doch jetz hab ich leider nen problem mit einr aufgabe und komm irgendwie nicht weiter. also. es geht um folgende aufgabe.

----

Ein Messgerät liefert Messwerte in Form eines Stroms ganzer Zahlen. Schreiben Sie ein Programm FilterSamples, das Messwerte von der Konsole liest und wie folgt verarbeitet:

1. Negative Werte werden gelöscht.
2. In der nach 1. verbleibenden Messwertfolge werden alle Gruppen von zwei oder mehr unmittelbar aufeinander folgenden Nullen zu einer einzigen 0 zusammengefaßt.
3. Die dann übrigen Messwerte werden ausgegeben.

Jede Folge endet mit dem Tripel -1 -1 -1, das sonst nicht vorkommt. Ein Beispiel:
1 2 3 1 -1 -2 0 0 3 4 -1 -1 -1 → 1 2 3 1 0 3 4
----

hört sich so ganz einfach an und sollt auch leicht zu verstehn sein.

hab allerdings noch keine ahnung wie ich es schaff das eine zahl nach der anderen gelesn wird und dann halt überprüft wird obs negativ is.

außerdem weiß ich auch nicht wie ich es dann schaff das z.b. 3 nuller hintereinander zu nur einem werden.


hoff mal ihr könnt mir weiterhelfen.

danke im vorraus.

mfg dandY :D
 

anfänger15

Bekanntes Mitglied
zu den Nullen, da kannst du ja den Stream den du von der Konsole bekommst nach dem zeichen 0 durchsuchen und
wenn du eine 0 gefunden hast zählst du intern eine variable bis drei hoch und bei 3 schreibst du dann eine null und falls
eben ein anderes zeichen eingegeben wird setzt du die interne variable wieder zurück

hoffe das war verständlich
 

anfänger15

Bekanntes Mitglied
von der konsole ließt du folgendermaßen ein:
Code:
      java.io.DataInputStream input;
      input = new java.io.DataInputStream(System.in);
  try {
         System.out.print("Ihre Eingabe: ");
         dateiname = input.readLine();
      }
      catch (java.io.IOException ex)
      {
         /* Fehlerauswertung */
         System.out.println("Bei der Eingabe ist ein Fehler aufgetreten: " +
            ex.getMessage());
         return;
      }


da musst du jetzt eben schauen wie du das bei dir anpasst, weil ich weiß nicht ob nur am anfang einmal einlesen
willst(mein beispiel) oder ob du die ganze zeit während das programm läuft einlesen willst, dann brauchst du noch ne
schleife um readLine und ggf. einen neuen Thread
 

Joker

Bekanntes Mitglied
alternativ kann die Eingabe ja auch direkt mit dem Programmaufruf erfolgen. Dann landet sie im Stringfeld deiner main Methode.

Wenn du die Eingabe erfolgreich eingelesen hast durchläufst du deine Datenstruktur (ein normales Integer oder Stringfeld, eine Liste, etc...) Element für Element mit einer Schleife. Innerhalb dieser Schleife kommen dann die drei Ifs um die kriterien zu berücksichtigen. Außerdem brauchst du eine Liste für die Aufnahme der Ergebnisse.

also grob so was:

Code:
 for(int i=0;i<array.length; i++) {
          
          if(...) 
          {
             
          }
          else if (...) 
          {
              
          }  
          else if(...)
          {
            
          }
      }

Im erstem If solltest du überprüfen ob das aktuelle Element = -1 ist. Ist dies der Fall, kannst du überprüfen ob die beiden folgenden Elemente ebenfalls -1 sein. Ist dies der Fall hast du das Ende der Folge erreicht.

Anschließend kommt dann die überprüfung ob das aktuelle Element = 0 ist. Ist dies der Fall kannst du mit einer while Schleife solange weiterlaufen bis du das nächste Element ungleich 0 gefunden hast. Überspringen kannst du die einfach, indem du die Variable i in dieser while Schleife hochzählst.

Jetzt musst du nur noch die Elemente > 0 heraussuchen, alle anderen Werte kannst du einfach ignorieren.
 

dandY

Mitglied
erstmal danke für die antwort. aber mit dem stream catch try usw. kann ich leider nochnix anfangen. soweit sind wir nochnicht.


des soll des augangsprogramm sein. weißnich ob ihr mir so vieleicht besser helfen könnt. davon wie des scanner input genau funktioniert hab ich allerdings auch noch keinen schimmer.





Code:
import java.util.*;

class ReadNumbers
{
    public static void main(String... args) throws Exception
    {
    	// Eingabe
        Scanner input = new Scanner(System.in);
	
	// Eingelesene Zahl
	int x = input.nextInt();
	
	// weiter bis eine 0 kommt ...
	while(x != 0)
	{
	    // Kontrollausgabe
	    System.out.printf("*%d*%n", x);
	    
	    // nächste Zahl lesen
	    x = input.nextInt();
	}
    }
}


mfg
 

anfänger15

Bekanntes Mitglied
Ja das ist doch schonmal ein gutes grundgerüst.

Alles was du jetzt noch machen musst ist ein paar if abfragen in die while schleife zu schreiben und dann eben schauen was für ein int eingegeben würde und wenn es keine negative zahl,... ist dann gibst du es mit System.out.print aus und sonnst eben nicht.

z.B
Code:
if(x > 0){
System.out.print(x);
}

um zu schauen ob es keine negative zahl ist

edit: zu den nullen:
Code:
if( x == 0){
nullenzaehler++;
if(nullenzaehler == 3){
System.out.print("0");
}
}else{
nullenzaehler =0;
}

und dann musst du die variable nullenzaehler noch auserhalb der while schleife declarieren
 

fehlerfinder

Bekanntes Mitglied
dandY hat gesagt.:
davon wie des scanner input genau funktioniert hab ich allerdings auch noch keinen schimmer.
Dann verschaff dir den doch durch einen Blick in java.util.Scanner. Da gibt's auch zu allen anderen Klassen und Interfaces des JDK Informationen (klick mal in der gerade genannten Seite auf "FRAMES", dann erhältst du eine bessere Übersicht. Überhaupt ist die Seite java.sun.com ein guter Anlaufpunkt für Informationen rund um Java.
 

dandY

Mitglied
Code:
import java.util.*;

class ReadNumbers
{
    public static void main(String... args) throws Exception
    {
  
        Scanner input = new Scanner(System.in);
	
	int x = input.nextInt();
	int zerocounter = 0;
	int onecounter = 0;
	
	
	while(onecounter != 3)
	{
	   
	if(x>0)
	    System.out.print(x);
	
	else
	    
	if(x == 0)
		zerocounter++;

	else
		zerocounter = 0;
	
	if(x == -1)
		onecounter++;
	else
		onecounter = 0;
		
	if(zerocounter == 3)
		System.out.print(0);

	
	x = input.nextInt();
	}


	


    }



}


so, soweit hab ichs jetz. leider is es ja jetz nur so dass wenn drei nuller hintereinander sind eine null ausgegeben wird. wie schaff ichs jetz dass bei einer null ganz normal eine null ausgegeben wird. oder bei zwei nullen eine. oder 4 oder 5 hintereinander.

mfg
 

Tharsonius

Bekanntes Mitglied
Wenn ich die Aufgabenstellung richtig verstanden habe sollst Du einfach eine Folge von 0 durch eine einzige ersetzen, dabei ist vollkommen egal wie viele hintereinander folgen. Ich würde es daher mit einem boolean machen anstatt zu zählen.


Code:
...
   int x;  // x an dieser Stelle nicht vorbelegen
   boolean zerocounter = false;

...
 
while(onecounter != 3)
{
   x = input.nextInt();
   if(x > 0)
   {  // Gewöhn Dir bei geschachtelten if an, Klammern zu setzen, das erleichtert die Lesbarkeit und Du überblickst besser was wozu gehört, außerdem ist es später leichter zu erweitern.
      System.out.print(x);
      zerocounter = false;  // zurücksetzen, da keine 0 kam
      onecounter = 0;  // An dieser Stelle muss der Zähler für -1 auch zurückgesetzt werden
   }
   else
   {
      if(x == 0)
      {
         if(zerocounter == false)  // Wenn zuvor keine 0 kam ist zerocounter false
         {
            System.out.print(0);  // Also 0 ausgeben (dies ist die erste 0 einer möglichen Reihe von 0
            zerocounter = true;  // merken dass 0 ausgegeben wurde.
         }
         // else entfällt an dieser Stelle, da ja bei weiteren 0 keine ausgegeben werden soll
      }
      else
      {
         zerocounter = false;  // zurücksetzen, da keine 0 kam
         if(x == -1)
         {
            onecounter++;
         }
         else
         {
            onecounter = 0;
         }
      }
   }
}

In Deinem Programm rufst Du selbst nach einer dreifachen -1 noch einmal das x ab, es ist aber keine weitere zahl mehr vorhanden,dies könnte ein fehler verursachen. besser ist es, das x als erstes in jedem Schleifendurchlauf abzurufen und dann dieses x auszuwerten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
A Laufzeitfehler bei Übungsaufgabe Java Basics - Anfänger-Themen 4
jonathanpizza Hilfe bei einer Übungsaufgabe Java Basics - Anfänger-Themen 6
K Rundbeet Übungsaufgabe Java Basics - Anfänger-Themen 3
J Hilfe bei Übungsaufgabe Java Basics - Anfänger-Themen 17
Z Unklarheit bei Übungsaufgabe [Anfänger] Java Basics - Anfänger-Themen 22
H Übungsaufgabe Java Basics - Anfänger-Themen 21
K Übungsaufgabe... Verständnisproblme (java 8.191) Java Basics - Anfänger-Themen 4
H Polynome Übungsaufgabe uni Java Basics - Anfänger-Themen 49
H Übungsaufgabe algorithmen Java Basics - Anfänger-Themen 2
L Übungsaufgabe zu Schleifen Java Basics - Anfänger-Themen 7
H Frage zu Übungsaufgabe, Array Java Basics - Anfänger-Themen 7
T Übungsaufgabe Event Handling Java Basics - Anfänger-Themen 0
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
B Hilfe bei Übungsaufgabe von Freitagsrunde Java Basics - Anfänger-Themen 5
B Übungsaufgabe Java Basics - Anfänger-Themen 5
M Übungsaufgabe Problem Java Basics - Anfänger-Themen 6
N Übungsaufgabe aus Java Buch bringt Fehler. Java Basics - Anfänger-Themen 10
B Übungsaufgabe zu Klassen, Methoden ... Java Basics - Anfänger-Themen 2
K Methoden Uhr als Übungsaufgabe Klassen/Objekte Java Basics - Anfänger-Themen 3
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
J Hilfe bei Übungsaufgabe Java Basics - Anfänger-Themen 5
D Brauche Hilfe bei Modulo (Übungsaufgabe) Java Basics - Anfänger-Themen 14
U Erste Schritte Fehler in Übungsaufgabe Java Basics - Anfänger-Themen 22
W Übungsaufgabe:Dynamische Datenstrukturen Java Basics - Anfänger-Themen 10
pg1337 Übungsaufgabe für Anfänger Java Basics - Anfänger-Themen 26
N Übungsaufgabe mit static Wert Java Basics - Anfänger-Themen 27
P Datentypen Frage zu einer Übungsaufgabe Java Basics - Anfänger-Themen 15
N Übungsaufgabe mit Interface Java Basics - Anfänger-Themen 2
F Schleifen Übungsaufgabe Java Basics - Anfänger-Themen 4
A Übungsaufgabe lösen - Problem mit true und false Java Basics - Anfänger-Themen 6
C Übungsaufgabe Java Basics - Anfänger-Themen 10
R Problem bei Übungsaufgabe Java Basics - Anfänger-Themen 7
M Hilfe bei Übungsaufgabe :'( nooby Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben