1

World of Warcraft ジュエル クラフティング オークション データを各色の最も価値のあるジェムで整理するアプリケーションを作成しています。これを行うために、jsonデータベースを配列に解析しようとしています-これを行うにはgson APIのようなものを使用するだけで簡単になることはわかっていますが、これはエントリーレベルのJavaクラスのプロジェクトであるため、私の教授は述べていますクラスで学んだことを使用してデータをインポートする必要があること、およびjsonデータを解析して画面に出力する次のコードがあると言われています(まだ配列への解析に取り組んでいます)data.jsonをアップロードしましたここまで、私がこれまでに持っているコードを以下に含めました:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class jcFormat {

public static void main(String[] args) {
    try {
        File f = new File("c:\\ProgramData\\jcUtil\\data.json");
        Scanner sc = new Scanner(f);

        List<Auction> ahdata = new ArrayList<Auction>();
        sc.nextLine();//eats line
        sc.nextLine();//eats line
        sc.nextLine();//eats line
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String[] details = line.split(",");
            //get item as string
            String itemz = details[1];
            itemz = itemz.substring(7, itemz.length());
            //convert itemz string to item int
            int item = Integer.parseInt(itemz);
            //get buyout as string
            String buyoutz = details[4];
            buyoutz = buyoutz.substring(9, buyoutz.length());
            //convert buyoutz string to buyout int
            int buyout = Integer.parseInt(buyoutz);
            //get quantity as string
            String quantityz = details[5];
            quantityz = quantityz.substring(11, quantityz.length());
            //convert quantityz string to quantity int
            int quantity = Integer.parseInt(quantityz);

            Auction a = new Auction(item, buyout, quantity);
            ahdata.add(a);
        }

        for (Auction a : ahdata) {
            System.out.println(a.toString());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
}

class Auction {

private int item;
private int buyout;
private int quantity;

public Auction(int item, int buyout, int quantity) {
    this.item = item;
    this.buyout = buyout;
    this.quantity = quantity;
}

/**
 * @return the item
 */
public int getItem() {
    return item;
}

/**
 * @param item the item to set
 */
public void setItem(int item) {
    this.item = item;
}

/**
 * @param buyout the buyout to set
 */
public void setBuyout(int buyout) {
    this.buyout = buyout;
}

/**
 * @return the buyout
 */
public int getBuyout() {
    return buyout;
}

/**
 * @return the quantity
 */
public int getQuantity() {
    return quantity;
}

/**
 * @param quantity the quantity to set
 */
public void setQuantity(int quantity) {
    this.quantity = quantity;
}

@Override
public String toString() {
    return this.item + "\t" + this.buyout + "\t" + this.quantity;
}
}

現在発生している問題は、次のエラーです。

スレッド「メイン」での例外 java.lang.StringIndexOutOfBoundsException: 文字列インデックスが範囲外です: -9 at java.lang.String.substring(String.java:1958) at jcutil.jcFormat.main(jcFormat.java:40) Java 結果: 1

data.json の最初の ~10 行でコードをテストすると、問題なく動作するので、どの行が問題を引き起こしているのかを突き止めようとしています。Java の初心者として、私のデバッグ スキルはあまり良くありません。なぜこのエラーが発生するのかを理解する助けがあれば大歓迎です。

4

1 に答える 1

0

あなたがEclipseを使用していると仮定すると、行にブレークポイントを置きます

buyoutz = buyoutz.substring(9, buyoutz.length());

アプリケーションをデバッグ モードで実行すると、問題の内容を確認できます。

于 2012-12-03T00:32:58.460 に答える