0

6列9行の.tsvファイルを解析する簡単な図をコーディングしています。3番目の列に存在するデータに従って色付けされたテキストを図に配置しようとしています。画面上のすべての色を取得できますが、何らかの理由で、赤で終わるテキストは、テキストを赤にしたい行の下の行(tsvファイル内)に対応するテキストです。たとえば、リベラル候補に(200,60,60)を塗りつぶしてもらいたいのですが、下の行に表示されているケベック党候補は代わりに赤になります。続いて、新民主党の候補者は(155,191,219)の塗りつぶしで終わります。コードは次のように表示されます。

PImage mapOfCanada; // background map
Premier[] premiers; // premiers data

void setup() {
  size(800, 800);
  // modified mapOfCanada from http://www.theblog.ca/map-canada
  mapOfCanada = loadImage("bigmapofcanada.png");
  // from http://en.wikipedia.org/wiki/List_of_current_Canadian_first_ministers
  Table table = new Table("premiers.tsv");
  int rows = table.getRowCount();
  premiers = new Premier[rows];
  // read through each row of the source data to populate our premiers array
  for (int i=0; i<rows; i++) {
    String name = table.getString(i, 0);
    String province = table.getString(i, 1);
    String party = table.getString(i, 2);
    String imgFile = table.getString(i, 3);
    PImage img = loadImage(imgFile);
    float x = table.getFloat(i,4);
    float y = table.getFloat(i,5);
    premiers[i] = new Premier(name, province, party, img, x, y);
  }
}

void draw() {
  background(255);
  // draw the background image with a light tint
  tint(255, 25);
  image(mapOfCanada, 0, 0);

  // draw each premier
  noTint();
  for (Premier premier : premiers) {
    image(premier.img, premier.x, premier.y);
  }
  //drawing lines for those premier images that cannot fit in the alloted province space
  line(158,560,145,460); //Alberta
  line(300,560,340,500); //Manitoba
  line(650,365,670,410); //Newfoundland
  line(750,385,710,535); //PEI
  line(730,575,720,550); //Nova Scotia
  line(670,595,680,560); //New Brunswick

  //adding text labels
  for (Premier premier : premiers) { //reading through the source data in a loop
   textSize(10); //making the text size small yet readable
   textAlign(CENTER); //making sure the text is centered above the image
    text(premier.name, premier.x+50, premier.y-10); //positioning the text in relation to the x and y coordinates on the source data

{
String string1 = new String("Liberal");
String string2 = new String("Parti Quebecois");
String string3 = new String("New Democratic");
String string4 = new String ("Progressive Conservative");
String string5 = new String ("Saskatchewan Party");
String string6 = new String ("Yukon Party");

if (premier.party.equals("Liberal")) {
  fill(200,60,60);  
} 
else if (premier.party.equals("Parti Quebecois")) {
  fill(155,191,219);
}
else if (premier.party.equals("New Democratic")) {
  fill(180,151,107);
}
else if(premier.party.equals("Progressive Conservative")) {
  fill(96,104,250);
}
else if(premier.party.equals("Saskatchewan Party")) {
  fill (107,180,119);
}
else if(premier.party.equals("Yukon Party")) {
  fill (47,85,232);
}
  else {
  fill (0,0,0);
}
}
  }
}

class Premier {
  String name, province, party;
  PImage img; // this is the thumbnail image
  float x, y; // these are the coordinates for the thumbnail
  Premier(String name, String province, String party, PImage img, float x, float y) {
    this.name = name;
    this.province = province;
    this.party = party;
    this.img = img;
    this.x = x;
    this.y = y;
  }
}

どんな助けでも:私が間違っていることは大いにありがたいです!投稿を編集して、完全なコードを紹介しました。

ありがとうございました!

4

2 に答える 2

0

投稿したコードをラップするループでの 1 回限りのエラーのようです。

于 2013-02-26T05:47:22.370 に答える
0

発生している問題の説明によると、インデックス エラーに関連している可能性があります。つまり、実際には 1 ベースのインデックスを 0 ベースで使用している、またはその逆です。しかし、ループ コードと fill() コードがなければ、問題を特定するのは非常に困難です。

于 2013-02-26T11:38:38.730 に答える