2013-11-25 3 views
0

Привет, мне было интересно узнать, удалось ли получить длину элементов массива? Я проверил документы java, и единственная длина, которую я видел, была восстановлена, это длина самого массива. Мое назначение - использовать длины элементов для рандомизации цветов моих кирпичей. Если кто-то может указать в правильном направлении, чтобы получить длины получения длины элементов, которые будут высоко оценены. Вот мой код:Возвращаемая длина элемента массива

import javax.swing.JFrame; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.util.Random; 

@SuppressWarnings("serial") 
public class legos2v2 extends JFrame { 
private int startX; 
private int startY; 
private int legoWidth; 
private int legoHeight; 
private int baseLength; 
private int arcWidth; 
private int arcHeight; 
private Color[] colors; 

// Constructor 
public legos2v2() { 
    super("Jimmy's LEGOs"); 
    startX = 20; 
    startY = 300; 
    legoWidth = 50; 
    legoHeight = 20; 
    baseLength = 10; 
    arcWidth = 2; 
    arcHeight = 2; 


    // Declare and Array of Colors 
    Color[] colors = {Color.red, Color.blue, Color.yellow, Color.green, 
      Color.pink, Color.black, Color.magenta, Color.orange, 
      Color.cyan}; 


    // Get length of color 
    System.out.println("Array Length = " + colors.length + "\n"); 

} 
// The drawings in the graphics context 
public void paintComponent(Graphics g) { 


    // Call the paint method of the JFrame 
    super.paint(g); 

    int currentX = startX; 
    int currentY = startY; 

    Random random = new Random(); 


    // row = 0 is the bottom row 
    for (int row = 1; row <= baseLength; row++) { 
     currentX = startX; 

     for (int col = 0; col <= baseLength - row; col++) { 

      g.fillRoundRect(currentX, currentY, legoWidth, legoHeight, arcWidth, arcHeight); 


      // Generate random integer from 0 to 8 
      int randomIndex = random.nextInt(colors.length); 


      g.setColor(this.colors[randomIndex]); 
      //Error here this.colors = colors[randomIndex]; 



      // Print random integers to screen 
      System.out.println(randomIndex); 

      currentX = currentX + legoWidth; 
     } 
     currentY -= legoHeight; 
     startX += legoWidth/2; 
    } 
} 
// The main method 
public static void main(String[] args) { 
    legos2v2 app = new legos2v2(); 
    // Set the size and the visibility 
    app.setSize(550, 325); 
    app.setVisible(true); 
    // Exit on close is clicked 
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
} 
+0

Я вижу только один массив в приведенном выше коде, и это массив цветов. Какова длина цвета? Я не могу понять ваш вопрос. –

+0

Я думаю, что вы хотите rand.nextInt (9), а не 8. Вызов, что с 8 даст вам диапазон 0-7. – fjc

+0

Кроме того, почему вы инициализируете этот массив цветов, если вы ничего не делаете с ним? Вы, вероятно, пытаетесь сделать этот aray переменной экземпляра и замените свою длинную цепочку if на 'g.setColor (this.colors [randNumber]);' –

ответ

2

Что учитель просит вас сделать то, что я сказал в комментариях:

  1. Инициализировать массив цветов:

    Color[] colors = ...; 
    
  2. Генерировать случайный интервал между 0 (включенным) и длиной массива (исключение:

    int randomIndex = random.nextInt(colors.length); 
    

    Это возвращает целое число, которое является допустимым индексом для массива цветов.

  3. выбрать цвет в случайном индексе:

    Color color = colors[randomIndex]; 
    

Это позволяет избежать необходимости уродливой цепи if блоков, чтобы генерировать случайный цвет.

EDIT:

  1. заменить Color[] colors = на this.colors = инициализировать переменную экземпляра вместо переопределения локальную переменную с тем же именем
  2. Как вы сказали делать в других комментариях, двигаться Random random = new Random(); перед первым for loop
  3. Как вам сказали сделать в других комментариях, переопределите paintComponent() вместо того, чтобы переопределять paint().
+0

У меня все еще есть проблемы даже с вашим ответом. Я инициализировал массивы цветов в конструкторе, но я не уверен, куда идет вторая часть. Разве это не должно идти внутри цикла «for»? Если я положил его туда, «colors.length» не работает. Извините, я сейчас борюсь с этим. – jnguyen

+0

Массив должен быть инициализирован просто ince, в конструкторе. Затем в цикле for, когда вам нужен случайный цвет, вы можете использовать этот массив и случайный индекс для выбора случайного цвета. –

+0

Я считаю, что обновил свой код так же, как вы его инструктировали, но до сих пор не повезло, что он работает. Я продолжаю получать ошибку для «colors.length» для 'int randomIndex = random.nextInt (colors.length)' Я редактировал мой код выше. Не могли бы вы взглянуть на него? Это дает мне головную боль ... – jnguyen

Смежные вопросы