2017-12-31 119 views
0

Also das ist mein Code:Fehler beim Versuch, ein Rechteck mit Arrays als Argumente in Java anzuzeigen

import javax.swing.*; 
import java.awt.*; 

public class ShapeTest extends JFrame{ 
    public ShapeTest(){ 
      setSize(600,600); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setLocationRelativeTo(null); 
      setVisible(true); 
    } 

    public static void main(String a[]){ 
     new ShapeTest(); 
    } 

    public void paint(Graphics g){ 
      Rectangle[][] v = new Rectangle[200][200]; 
      v[1][1].x=0; 
      v[1][1].y=0; 
      v[1][1].width=50; 
      v[1][1].height=50; 
      int y1=50; 
      for(int i=1; i<=7; i++){ 
       int cont=50; 
       for(int j=1; j<=7; j++){ 
        v[i][j].x+=cont; 
        v[i][j].y=y1; 
        cont+=70; 
       } 
       y1+=70; 
      } 
      for(int i=1; i<=7; i++){ 
       for(int j=1; j<=7; j++){ 
        g.drawRect(v[i][j].x, v[i][j].y, v[i][j].width, v[i][j].height); 
        g.setColor(Color.yellow); 
        g.fillRect(v[i][j].x, v[i][j].y, v[i][j].width, v[i][j].height); 
       } 
      } 

      } 
    } 

und das ist die Unterklasse:

public class Rectangle{ 
    public int x; 
    public int y; 
    public int width; 
    public int height; 
} 

Wenn ich den Code ausführen, keine Rechtecken angezeigt werden, aber ich bekomme eine Reihe von Fehlern in einem Textfeld:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at ShapeTest.paint(ShapeTest.java:18) 


das ist der einzige Fehler, der rot ist und ich habe keine Ahnung, warum er erscheint. Ich habe neulich versucht, den Code ohne Arrays laufen zu lassen und es hat funktioniert, also glaube ich, dass das das Problem sein könnte.

+0

einfach zu schreiben um sicher zu sein, wissen Sie, dass, wenn ein Array 7-Zellen hat sie 0-6 nummeriert sind? 'für (int i = 1; i <= 7; i ++) scheint eigenartig. Normalerweise hätten Sie für (int i = 0; i <7; i ++). Das Gleiche gilt für 'v [1] [1]', normalerweise ist die erste Zelle 'v [0] [0]'. – kabanus

+0

@kabanus ja, aber meine ursprüngliche Array hat 200 * 200 Werte und ich möchte immer von 1 beginnen, um nicht mit den Nullen zu verwirren, also im Grunde, wenn ich von 1 beginne und gehe zu 7 enthalten, werde ich 7 Zellen haben sowieso. – Whitewolf3131

+0

Wenn die Zeile des Fehlers angegeben ist, fügen Sie einen Kommentar zu der Zeile in Ihrem Post hinzu, damit wir wissen können, wo es sich befindet. – azro

Antwort

0

Ich denke, Linie 18 ist, wo Sie

nennen
v[1][1].x=0; 

Sie haben vergessen, das Rechteck-Klasse zu starten. Nach der Array-Erstellung

Rectangle[][] v = new Rectangle[200][200]; 

benötigen Sie

for(int i=0;i<200;i++) { 
    for(int j=0;j<200;j++) { 
     v[i][j] = new Rectangle(); 
    } 
} 
+0

Okay, das schien das Problem zu sein. Ich code normalerweise in C++ und ich hatte keine Idee, dass in Java Sie jedes Mal die Rectangle-Klasse initiieren müssen. Danke vielmals! – Whitewolf3131

Verwandte Themen