首页 > 解决方案 > 如何设置 ArrayList

问题描述

我正在尝试运行此代码和 ArrayList data = handler.getnames(); 显示错误变量数据已在方法 main(String[]) 中定义。我猜它希望我将它与 ArrayList data = handler.getsetnums(); 结合起来。但是我该怎么做呢?还是有其他方法?
那些代码可以工作,并且应该能够运行它并获得输出,现在当我只有一个数组工作时,代码可以完成它需要做的事情。

预期结果

<set-num>00-1</set-num>
<name>WEETABIX CASTLE</name>

谢谢你。

---MAIN.java---
package assign6;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.XMLReaderFactory;

    /**
     *
     * @author assign
     */
    public class Assign6 {

        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            System.out.print("Welcome to Benjamin Bolyard's Lego Sorter");
            try {
                XMLReader reader = XMLReaderFactory.createXMLReader();
                MyHandler handler = new MyHandler();
                reader.setContentHandler(handler);
                reader.setErrorHandler(handler);

                InputSource inputSource = new InputSource("legoSets.xml");
                reader.parse(inputSource);

                ArrayList<String> data = handler.getsetnums();

                System.out.println("setnum List");
                System.out.println("----------");
                for (int i = 0; i < data.size(); i++) {
                    String setnum = data.get(i);
                    setnum = setnum.toUpperCase();
                    System.out.println((i + 1) + ": " + setnum);
                }

                ArrayList<String> data = handler.getnames();

                System.out.println("name List");
                System.out.println("----------");
                for (int i = 0; i < data.size(); i++) {
                    String name = data.get(i);
                    name = name.toUpperCase();
                    System.out.println((i + 1) + ": " + name);
                }

            } catch (SAXException ex) {
                Logger.getLogger(BolyardAssign6.class.getName())
                        .log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(BolyardAssign6.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }

    }
--HANDLER.java---
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package bolyardassign6;

import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

/**
 *
 * @author bolya
 */
public class MyHandler extends DefaultHandler {

    private boolean inlegosets;
    private boolean inname;
    private boolean insetnum;
    private String nameBuffer;
    private String setnumBuffer;

     private ArrayList<String> setnums, names;

    public ArrayList<String> getsetnums() {
        return setnums;

    }

    public ArrayList<String> getnames() {
        return names;
    }

    @Override
    public void startDocument() throws SAXException {
        // System.out.println("Start Document")
        insetnum = false;
        inname = false;
        inlegosets = false;
        nameBuffer = "";
        names = new ArrayList<>();
    }

    @Override
    public void startElement(String uri, String localName,
            String qName, Attributes attributes) throws SAXException {
        if (localName.equals("lego-sets")) {
            inlegosets = true;
        } else if (inlegosets && localName.equals("setnum")) {
            // System.out.println("Start element : " + localName);
            insetnum = true;
            setnumBuffer = "";

        } else if (inlegosets && localName.equals("name")) {
            // System.out.println("Start element : " + localName);
            inname = true;
            nameBuffer = "";
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        String data = new String(ch, start, length);
        if (inlegosets && inname) {
            // System.out.println("Characters : " + data);
            nameBuffer = nameBuffer + data;
        } else if (inlegosets && insetnum) {
            // System.out.println("Characters : " + data);
            setnumBuffer = setnumBuffer + data;
    }
    }

    @Override
    public void endElement(String uri, String localName,
            String qName) throws SAXException {
        if (localName.equals("inlegosets")) {
            inlegosets = false;
        } else if (inlegosets && localName.equals("setnum")) {
            // System.out.println("Title: " + titleBuffer);
            // System.out.println("End element   : " + localName);
            // System.out.println();            
            setnums.add(setnumBuffer);
            insetnum = false;
        } else if (inlegosets && localName.equals("name")) {
            // System.out.println("Title: " + titleBuffer);
            // System.out.println("End element   : " + localName);
            // System.out.println();            
            names.add(nameBuffer);
            inname = false;
        }
    }

    @Override
    public void endDocument() throws SAXException {
        // System.out.println("End Document");
    }

    @Override
    public void error(SAXParseException e) throws SAXException {
        System.out.println("ERROR: Line number " + e.getLineNumber());
        System.out.println("ERROR:             " + e.getMessage());
    }

    @Override
    public void fatalError(SAXParseException e) throws SAXException {
        System.out.println("FATAL ERROR: Line number " + e.getLineNumber());
        System.out.println("FATAL ERROR:             " + e.getMessage());
    }

}

---legoset.xml---
<lego-sets>
    <set>
        <set-num>00-1</set-num>
        <name>WEETABIX CASTLE</name>
        <year>1970</year>
        <num-parts>471</num-parts>
    </set>
    <set>
        <set-num>0011-2</set-num>
        <name>TOWN MINI-FIGURES</name>
        <year>1978</year>
        <num-parts>12</num-parts>
    </set>
    <set>
        <set-num>0011-3</set-num>
        <name>CASTLE 2 FOR 1 BONUS OFFER</name>
        <year>1987</year>
        <num-parts>2</num-parts>
    </set>
    <set>
        <set-num>0012-1</set-num>
        <name>SPACE MINI-FIGURES</name>
        <year>1979</year>
        <num-parts>12</num-parts>
    </set>
</lego-sets>

标签: java

解决方案


您已经定义了两个名为 的变量data。要解决此问题,请更改其中之一的名称。或者,您可以删除声明并在第二个数组列表中添加以下内容:data = handler.getnames();


推荐阅读