Code kürzen?

08/21/2014 00:14 TeraTroll#1
Guten Abend/Nacht liebe Comm,

ich habe mal wieder ein Anligen(wie auch sonst),
1.) Wo genau liegt der Fehler an diesem Code?

2.) Wie könnte man diesen Teil bzw. diese zwei Schleifen in eine packen?
08/21/2014 00:43 strubelz#2
So wie ich das sehe, bleiben die Werte die du in dem Schleifen ausrechnest konstant, und haben eine feste länge, du kannst die Werte als einmal ausrechnen und sie dann in ein Array packen.
Pseudeo (vieleicht auch lauffähig, habs aber ohne IDE geschrieben) Code:
Code:
import java.awt.*;
import java.util.Random;
import javax.swing.*;

public class Main extends JPanel
{
  private static final long serialVersionUID = -2294685016438617741L;
  private static final Random r = new Random();
int[] ax = new int[größe des Arrays]; //größe des Arrays ist die Anzahl wie viele Zahlen in den Array passen sollen, die musst du halt einmal ausrechen/ausprinten lassen
int[] ay = new int[größe des Arrays]; 

  @Override
  protected void paintComponent( Graphics g )
  {
    super.paintComponent( g );
    		g.setColor(new Color(255,0,0));
    			for(int i : ax){
    				g.drawLine(i, 0, 0, 0);
    			}
    			for(int i : ay){
    				g.drawLine(i, 0, 0, 0);
    			 }
 	//oder wenn du es in einer Schleife willst
for (int i = 0; i < Math.max(ax.lenght, ay.lenght); i++) {
if (i < ax.lenght) {
g.drawLine(ax[i], 0, 0, 0);
}
if (i < ay.lenght) {
g.drawLine(ay[i], 0, 0, 0);
}
}
  }

  public static void main( String[] args )
  {
    JFrame f = new JFrame( "Neoplastizismus" );
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    f.setSize( 300, 300 );
    f.add( new Main() );
    f.setVisible( true );
    f.setResizable(false);
    f.setLocationRelativeTo(null);
int i = 0;
    		g.setColor(new Color(255,0,0));
    			for(int x = 10; x < getWidth() -10; x=+10){
    				ax[i] = x;
i++;
    			}
i = 0;
    			for(int y = 10; y < getHeight() - 10; y=+10){
    				ay[i] = y;
i++;
    			}

  }
}
Aber ich glaube nicht das du damit wirklich Leistung sparts :)
08/21/2014 07:16 Mostey#3
1.) Was soll das denn? Was funktioniert nicht und was hast du getan, um das Problem zu beheben? Ich kann kein Java, kann mir aber gut vorstellen das die Linien die du zeichnest nicht auftauchen, weil deren Länge 0 ist. Du übergibst ja nichts anderes als die X Koordinate.

2.) Gar nicht. Außer, wenn garantiert ist, das die Breite von X immer den selben Wert besitzt wie die Höhe von Y. Dann könntest du in einer Schleife beide Linien zeichnen.
08/21/2014 11:06 dowhile#4
Du schreibst in den Schleifen x=+10. Das weißt x nach jedem Durchlauf den Wert +10, also 10 zu.
Du möchtest aber x+=10, was den Wert von x nach jedem Durchlauf um 10 erhöht.
08/21/2014 13:01 MrDami123#5
Die zwei Schleifen machen genau das identische. Wieso machst du die nicht zur einer und übergibst jeweils den Wert Height oder Width?
08/21/2014 14:36 ​Tension#6
Quote:
Originally Posted by MrDami123 View Post
Die zwei Schleifen machen genau das identische. Wieso machst du die nicht zur einer und übergibst jeweils den Wert Height oder Width?
Weil Width größer oder kleiner als Height sein könnte.
08/21/2014 16:51 TeraTroll#7
Richtig...ich wollte an sich von den Seiten, Linien bis zur Mitte des Bildschirms führen lassen...
Also in etwa so:
Code:
g.drawLine(x,y,getHeight()/2,getWidth()/2)
Jedoch wenn ich das Programm starte entsteht ein durchsichtiges Fenster....


EDIT:
Habe nochmal rumprobiert und es funktioniert *_*
Code:
    		g.setColor(new Color(255,0,0));
    			for(int x = 10; x < getWidth() -10; x+=10){
    				g.drawLine(x, 0, getHeight()/2, getWidth()/2);
    			}
    			for(int y = 10; y < getHeight() - 10; y+=10){
    				g.drawLine(0, y, getHeight()/2, getWidth()/2);
    			}
08/21/2014 17:08 Netzgeist#8
1)
Deine Schleife ist syntaktisch falsch. Im Iterationsschritt benutzt du eine Zuweisung auf 10. X wird immer 10 bleiben und du wirst die Schleife nicht verlassen. Deshalb wird (fast) nichts gezeichnet. Die Fehlende Funktionalität des gesamten Frames (zB. dem close-event) hat dich nicht stutzig gemacht?
Richtig wäre x += 10 oder x = x +10.

2)
Der Rumpf beider Schleifen tut auch in Zukunft exakt das selbe? Dann vergleiche beide Iterationsbedingungen und nimm die größere:
Code:
int max = ((getWidth() > getHeight()) ? getWidth() : getHeight()) - 10;
        
for (int x = 10; x < max; x += 10) {
    g.drawLine(x, x, getHeight() / 2, getWidth() / 2);
}
Passieren im Rumpf in Zukunft verschiedene Dinge brauchst du jedoch weiterhin 2 Schleifen.
08/21/2014 17:15 TeraTroll#9
Es funktioniert nun =) trotzdem vielen dank ;) nun muss ich schauen wie ich es von den entgegen gesetzten Rchtungen hinbekomme. ^^

Edit:
Das habe ich nun auch hinbekommen war ja nicht so schwer haha ^^



MfG Joshi