实际和正式的论点长度不同

时间:2014-05-27 00:34:57

标签: java

我有以下代码Simmulation.java,但是当我尝试编译时,它会出现错误,

error: constructor CashewPallet in class CashewPallet cannot be applied to give types;

CashewPallet c1 = new CashewPallet();

Required: String,int, found: no arguments

Reason: Actual and formal arguments differ in length

我知道这个错误意味着什么,当我尝试将行修改为CashewPallet c1 = new CashewPallet(String, int);并再次CashewPallet c1 = new CashewPallet(nutType, id);时,但要么不起作用!现在我不确定如何解决这个问题。 我是新手,非常感谢任何帮助。 提前谢谢了! 请耐心等待。

编辑:谢谢大家的答案!它已经成功并且已经成功编译但是当我执行它时,它会提出error: ArrayIndexOutOfBoundsException :0 at Simmulation.main(Simmulation.java:201)任何帮助修复它请?

谢谢!

这是Simmulation.java文件

import java.io.File;
import java.util.LinkedList;
import java.util.Queue;
import java.util.*;
import java.util.Scanner;
import java.io.*;


public class Simmulation implements Operation {

Queue<CashewPallet> inputQueue=new LinkedList<CashewPallet>();
Stack<CashewPallet> stBay1=new Stack<CashewPallet>();
Stack<CashewPallet> stBay2=new Stack<CashewPallet>();
FileOutputStream fout4;
PrintWriter pw;
static int tick=0;

CashewPallet c1;
String temp;
Scanner sc;

public Simmulation(String fn) 
{
    int index=0;
    String nutType="";
    int id=0;

    Scanner s2 ;

    try
    {
        sc = new Scanner(new File(fn));
        fout4=new FileOutputStream("nuts.txt");
        pw=new PrintWriter(fout4,true);
        String eol = System.getProperty("line.separator");
        while(sc.hasNextLine())
        {
            tick++;
            s2 = new Scanner(sc.nextLine());
            if(s2.hasNext())
            {
                while ( s2.hasNext())
                {
                    String s = s2.next();
                    if(index==0)
                    {
                        nutType=s;
                    }
                    else
                    {
                        id=Integer.parseInt(s);
                    } 
                    index++;
                }
                System.out.println("Nuttype "+nutType+" Id is "+id+"tick "+tick);
                if((nutType.equalsIgnoreCase("A")||nutType.equalsIgnoreCase("P")|| nutType.equalsIgnoreCase("C")|| nutType.equalsIgnoreCase("W")) && id!=0)
                inputQueue.add(new CashewPallet(nutType.toUpperCase(),id));
                System.out.println("Size of Queue "+inputQueue.size());
                int k=0;
                if(!inputQueue.isEmpty())
                {
                    while(inputQueue.size()>k)
                    {
                        // stBay1.push(inputQueue.poll());
                        process(inputQueue.poll());
                        k++;
                    }
                    // System.out.println("Size of input "+inputQueue.size() +" Size of stay "+stBay1.size());      

                }
            }    
            else
            {
                fout4.write(" ".getBytes());
            }
            index=0;   
            if(!stBay2.isEmpty())
            {
                while(!stBay2.isEmpty())
                {
                    c1=stBay2.pop();
                    temp=tick+" "+c1.getNutType()+" "+c1.getId()+eol;
                    fout4.write(temp.getBytes());
                }
                // System.out.println("Nut final "+ stBay2.peek().getNutType());
            }
             else
             {
                 temp=tick+eol;
                 fout4.write(temp.getBytes());
             }
         }
     }
     catch(Exception e)
     {
         System.out.println("Exception "+e);
     }
     closeStream();
 }


public CashewPallet process( CashewPallet c)
{      
    //CashewPallet  c=new CashewPallet();
    int k=0;
    //while(stBay.size()>k)
    //{
    //c=stBay.pop();
    String operation=c.getNutType();

    if(c.getPriority()==1)
    {
         shelling(c);
             washing(c);
                     packing(c);
                     //stBay2.push(c);
    }
    else
    {
        switch(operation)
        {
            case "A": shelling(c);
                       washing(c);
                       packing(c);
            break;

            case "C": washing(c);
                      packing(c);
            break;

            case "W" : washing(c);
                      shelling(c);
                       packing(c);
            break;               

        }
    }
    return c;
}
public void closeStream()
{
    try
    {
        fout4.close();
    }
    catch(Exception e)
    {

    }
}

public boolean shelling(CashewPallet c)
{
    // for(int i=0;i<20; i++)
    {
        System.out.println("Performing Shelling for  "+c.getNutType());
    }
    return true;
}
public boolean washing(CashewPallet c)
{
   // for(int i=0;i<20; i++)
    {
        System.out.println("Performing Washing for  "+c.getNutType());
    }
    return true;
}

public boolean packing(CashewPallet c)
{
    //for(int i=0;i<20; i++)
    {
        System.out.println("Performing Packing for  "+c.getNutType());
    }
    stBay2.push(c);
    return true;
}

public static void main(String args[])
{
    new Simmulation(args[0]);
}

这是CashewPallet.java文件

public class CashewPallet {
private String nutType;
private int id;
private int priority;
private int opTick;

public int getOpTick() {
    return opTick;
}

public void setOpTick(int opTick) {
    this.opTick = opTick;
}
public int getPriority() {
    return priority;
}

public void setPriority(int priority) {
    this.priority = priority;
}

public CashewPallet(String nutType, int id) {
    this.nutType = nutType;
    this.id = id;

    if(this.nutType.equalsIgnoreCase("p"))
    {
        priority=1;
    }
    else
    {
        priority=0;
    }
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getNutType() {
    return nutType;
}

public void setNutType(String nutType) {
    this.nutType = nutType;
}

2 个答案:

答案 0 :(得分:1)

使用CashewPallet的构造函数时,需要为参数提供实际值。参数为String nutTypeint id,这意味着您需要提供String nutTypeint id CashewPallet c1 = new CashewPallet("Pecan", 42); {{1}} }}。例如:

{{1}}

答案 1 :(得分:0)

CashewPallet中的构造函数需要Stringint;你没有提供它们:

public CashewPallet(String nutType, int id)

你这样称呼它:

CashewPallet c1 = new CashewPallet();

将其更改为:

CashewPallet c1 = new CashewPallet("Peanut",1337);

编辑:

你在这一行得到ArrayIndexOutOfBoundsException

new Simmulation(args[0]);

那是在args[0]。如果这超出范围,则意味着您没有命令行参数。

您应该使用命令行参数(或者特别是一个命令行参数)来调用它。

java Simmulation myarg

在这种情况下,您的参数是文件的名称。