Gitter.java /StdIn StdOut

L

Learner

Gast
Hallo allerseits,
wir haben ein ähnliches Problem wie JackMoonyM. im StdIn und StdOut...( http://www.java-forum.org/hausaufgaben/112316-stdin-stdout.html ) Thread, bzw. ein weiterführendes. Den Teil der Aufgabe nach dem er fragt haben wir gelöst:

[Java] public class Gitter_a{
public static void main(String [] args){

int zeile = StdIn.readInt();
int spalte = StdIn.readInt();
int b;

char [][] matrix = new char [zeile][spalte];

for (int i = 0; i < matrix.length; i++){
for (int j = 0; j < matrix.length; j++){
b = StdIn.readInt();
if (b ==1){
matrix [j] = 'X';
}
else
if (b == 2){
matrix [j] = 'Y';
}
else{
matrix [j]= 'O';
}
}
}
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j<matrix.length; j++){
StdOut.print(matrix[j] + " ");
}
StdOut.println();
}
StdOut.println();

}
} [/Java]

Jetzt kommt Teil b:

Erweitern Sie Ihr Programm aus Teilaufgabe a) so, dass das Programm die längste Sequenz
von aufeinander folgenden 'X' findet, die horizontal, vertikal oder diagonal auftritt. Das
Programm soll dann diese 'X' in '*' ändern und das so veränderte Array ausgeben.
Beispiel:
O O O Y wird zu O O O Y
X Y O Y * Y O Y
O X X Y O * X Y
O O X O O O * O
 
L

Learner

Gast
Falsche Darstellung - Sorry
So siehts besser aus - hoffe ich
O O O Y
X Y O Y
O X X Y
O O X O

wird zu
O O O Y
* Y O Y
O * X Y
O O * O

Wir haben uns bisher folgendes überlegt:

[Java]

int u =0;
for (int i = 0; i < matrix.length; i++){
for (int j = 0; j < matrix.length; j++){
int b= 0;
if (matrix[j] == 'X' ){
int h = b+j;
if(h>b)
b=h;


StdOut.print(b+ "*"); }

}}}}
[/Java]
Ist das vom Ansatz her gut?
Der Dr.Java zählt uns dann für die Zeilen schonmal die Anzahl der x in einer Reihe, aber gibt für die letzte Reihe zwei x an, da erden wert aus der vorherigen reihe behält
 

fjord

Bekanntes Mitglied
Überlegt euch mal aussagekräftigere Variablen. Was sind u, b und h?
Ich würde vorschlagen euren Lösungsansatz mal als Text statt als Code zu beschreiben.
Beantwortet euch erstmal die Frage: Wie findet man die längste Sequenz?
 

fjord

Bekanntes Mitglied
OK.
Du überprüfst für jede Position wie lang die Sequenzen die von der Position aus nach rechts, rechtsunten und unten ausgehen sind und vergleichst das mit der bisher längsten Sequenz.

Jetzt ist die Frage wie du die Längen bestimmt und dir die vorherige Sequenz merkst. ;)
 
D

DeusEx

Gast
Ich habe eine Frage zu dem ersteren Programm. Ich habe eine ähnliche Aufgabe, in dem ich Stdin und Stdout in einem Programm zusammenführen muss. Beim Kompilieren des Programms gab es einen "Cannot Find Symbol: variable Stdin" und "variable Stdout".
Den Fehler mit dem Stdin konnte ich mit
Java:
DataInputStream StdIn = new DataInputStream(System.in);
lösen, bei Stdout ist es allerdings nicht so einfach.
Tippe ich
Java:
DataOutputStream Stdout = new DataOutputStream(System.out);
ein so gibt es einen "Cannot find Symbol method print (java.lang.String)"
Muss ich ein package oder soetwas hinzufügen? Über Auskunft wäre ich dankbar.
 

fjord

Bekanntes Mitglied
Deine Frage wäre in einem eigenen Thread besser untergebracht.
Um sie beantworten zu können ist das zuwenig Code. Steht bei dem Fehler eine Zeilennummer dabei und falls ja, was steht in der Zeile?
 
D

DeusEx

Gast
danke hat sich bereits erledigt. Anscheindend konnte ich das Programm fehlerlos nur dann ausführen, wenn ich es in einem Ordner kopiert und kompiliert habe. Erst dort konnte es auf Stdin/Stdout zugreifen.
 

Neue Themen


Oben