OOP Statisitik anzeigen

pisco

Bekanntes Mitglied
Hey Leute

ich möchte so eine grafik für die Konsole coden:

Java:
Gefällt
6|                    x
5|                xxxxx    
4|        x   x xxxxxxx
3|    xxxxxxxxxxxxxxxx
2| xxxxxxxxxxxxxxxxxx
1|xxxxxxxxxxxxxxxxxxx
0|-------------------------------------------------------------Zeit
   123456789 Stunde

Also ich hätte mir überlegt ein 2Dimensionales Array. Mein Problem ist aber ich möchte den Graphen in diesem Programm verändern nur die Achsen bleiben gleich...

Meine Zeitachse geht auch irgendwie ned..

Wie erstell ich das am besten?

Habt ihr vll Ideen?

gruss und dank euch schonmal für eure Antwort

PS.: Vll gibts ja auch was anderes als die Konsole, so ein Java Graphen SDK^^
 
Zuletzt bearbeitet:
Natürlich gibt es auch was anderes wie die Konsole. Du kannst ein Programm mit einem Fenster programmieren, dazu kannst du die z.B java swing ansehen.

Das ist aber nicht ganz leicht (da musst du dir zumindest ein bisschen Zeit nehmen dich einzulesen).
Ansonsten muss ich sagen hab ich nocht nicht ganz verstanden was du vor hast.
 
hey erstmal danke für deine Antwort

also mein Programm hat eine x und eine y Achse innerhalb dieser Achsen möchte ich einen Graphen darstellen in Ascii-Form

Die Graphen werden einfach mir Punkten gefüllt die man zuvor eingibt, oder als Statistische Daten einlies(scanner)

Meine Frage ist nun: Wie kann ich das am besten realisieren?

Mein erster Gedanke ist ein 2Dimensionales array wo ich alles hineingebe.

Wie ich den Graphen zeichne ist mir noch unklar...

lg
 
Zuletzt bearbeitet:
naja ich weis jetzt grad nicht ob das das ist was du wolltest, aber ich hab mal ein kurzes Programm geschreiben das vl das macht was du möchtest.

Da für brauchst du aber kein zwei Dimensionales Array.

Java:
   public static void main (String[] args) {
    	
    	
    	int [] daten = {4,5,7,8,10};
    	int max=0;
    	System.out.println(" X");
    	System.out.println(" ^");
    	for ( int x =0; x<daten.length;x++){
    		System.out.print(x+"|");
    		for (int y=0;y<daten[x];y++){
    			if (daten[x]>max){
    				max=daten[x];
    			}
    			System.out.print("x");
    		}
    		System.out.println();
    	}
    	System.out.print(" -");
    	for (int y=0;y<max;y++){
    		System.out.print("-");
    	}
    	System.out.println(">Y");
    }
 
Die obere Lösung vertauscht leider die Achsen.
Auch finde ich, sollte man die Funktion von print kapseln - hier jedenfalls mein Ansatz:
Java:
        int [] daten = {3,2,4,6};     // hier kommen die Y-Werte rein (für x=1, x=2, ...)
        String output = "";
        int max = 6; 					// maximaler Y-Wert
	        
        for(int i=max; i>0; i--){
        	output += i + "|";
        	for(int j=0; j<daten.length; j++){
        		if (i <= daten[j])
        			output += "x";
        		else
        			output += " ";
        	}
        	output += "\n";
        }
        
        System.out.print(output);
 
Hey Leute,
habs gelöst wie ichs wollte ;D schaut selbst:

meine Ausgabe:

Java:
  ^
10|                    
9 |        x           
8 |        x           
7 |      x x           
6 |    x x x           
5 |    x x x   x     x 
4 |  x x x x   x     x 
3 |  x x x x   x x   x 
2 |  x x x x x x x   x 
1 |x x x x x x x x x x 
  -- - - - - - - - - - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  >Zeit
  |0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24



Java:
public class Statistic_Main {
	
	public static void main(String[] args) {
		
		
		int [] daten = {2,5,7,8,10,3,6,4,2,6};
		
		System.out.println("  Gefällt");
		System.out.println("  ^");
		
		for ( int x =10; x>0; x--){//Gefällt-Achse
			
			if(x==10){
				System.out.print(x+"|");
			} else {
				System.out.print(x+" |");
			}
			
			for(int j=0; j<10; j++){//PROBLEMZEILE: Wenn ich hier ein  "=" hinmache dann funktionierts nichtmehr 
				
				if(daten[j]<=x){
					System.out.print("  ");
				} else {
					
					System.out.print("x ");
				}
			}
			System.out.println();
			
		}
		
		
		//Gibt die Zeit und die "-" aus
		System.out.print("  -");
		for (int y=0;y<=24;y++){//24 "-"
			
			if(y<10){
				System.out.print("- ");
				
			} else {
				System.out.print("-  ");
				
			}
			
		}
		System.out.println(">Zeit");
		
		System.out.print("  ");
		for (int y=0;y<=24;y++){//24 Stunden
			
			if(y<9){
				System.out.print("|" + y );
				
			} else {
				System.out.print("|" + y);
				
			}	
		}
		
		
		System.out.println();
		
		
	}
}

Ein einzigen Probleme sind:

wenn ich in dieser Zeile aus dem 10 einen 11er mache oder aus dem < ein <= dann geht das ganze nicht mehr:

Java:
for(int j=0; j<10; j++){//PROBLEMZEILE: Wenn ich hier ein  "=" hinmache dann funktionierts nichtmehr 
				
				if(daten[j]<=x){
					System.out.print("  ");
				} else {
					
					System.out.print("x ");
				}
			}

Meine Fehlermeldung:

Gefällt
^
10| Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10

und es werden im Diagramm nur zBsp ein "x" anstatt im Datensatz 2 "x" angezeigt...


Ich bedank mich schonmal für eure Hilfe und wünsch euch eine gute Nacht ;D

gruss
 
Die Schleife soll doch über das Array iterieren; sinnvoll ist es dann doch nur, von Index=0 bis Index=(Länge-1) zu laufen, um so das Array vom ersten bis zum letzten Element zu durchlaufen. Daher sollte die Endbedingung auch nicht redundant als Zahlenwert codiert sein, sondern zur Laufzeit aus dem Array ermittelt werden:
Java:
for(int j=0; j<daten.length; j++){
Oder man verwendet gleich die foreach-Syntax (wenn man eine hinreichend aktuelle Java-Version verwendet)
Java:
for (int d: daten){
 
vielen dank für deine Antwort ;D

also zwei Fragen quälen mich gerade noch:

1. Frage:
nehmen wir das Diagram her:
Java:
  Gefällt
  ^
10|                    
9 |        x           
8 |        x           
7 |      x x           
6 |    x x x           
5 |    x x x   x     x 
4 |  x x x x   x     x 
3 |  x x x x   x x   x 
2 |  x x x x x x x   x 
1 |x x x x x x x x x x 
  -- - - - - - - - - - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  >Zeit
  |0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24

die Datensätze lauten:

int [] daten = {2,5,7,8,10,3,6,4,2,6};
aber wie man sieht wird nur ein x angezeigt.... Warum?

2. Frage:

könnte ich eigentlich auch jeden Punkt in diesem Koordinatensystem einzeln ansprechen so als x,y Koordinate?

Wenn ja wie würd ich das umsetzten?

gruss und dank euch schonmal für eure Antwort
 
1. Frage:
nehmen wir das Diagram her:
Java:
  Gefällt
  ^
10|                    
9 |        x           
8 |        x           
7 |      x x           
6 |    x x x           
5 |    x x x   x     x 
4 |  x x x x   x     x 
3 |  x x x x   x x   x 
2 |  x x x x x x x   x 
1 |x x x x x x x x x x 
  -- - - - - - - - - - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  >Zeit
  |0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24

die Datensätze lauten:

int [] daten = {2,5,7,8,10,3,6,4,2,6};
aber wie man sieht wird nur ein x angezeigt.... Warum?

Du schreibst hier
Java:
                if(daten[j]<=x){
                    System.out.print("  ");
                } else {
                    
                    System.out.print("x ");
                }
Das "x" kommt also nur, wenn date[j] größer ist als x, nicht bei Gleichheit.
Versuch es doch mal mit
Java:
                if(daten[j]<x){
                    System.out.print("  ");
                } else {
                    
                    System.out.print("x ");
                }
oder auch verkürzt:
Java:
System.out.print( daten[j]<x ? ' ' : 'x');
 
2. Frage:

könnte ich eigentlich auch jeden Punkt in diesem Koordinatensystem einzeln ansprechen so als x,y Koordinate?
Wenn Du direkt in die Konsole schreiben willst, geht das mit reinem Java nicht - man kann immer nur innerhalb der aktuellen Zeile etwas in die Konsole schreiben.
Du könntest aber pixelweise zeichnen oder auch die Daten erstmal in ein zweidemsionales boolean-Array schreiben und das Array dann am Ende mit zwei verschachtelten for-Schleifen auf die Komnsole ausgeben.
 

Neue Themen


Zurück
Oben