Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList给定错误(加上方法帮助)_Java_Arrays_Arraylist_Java.util.scanner - Fatal编程技术网

Java ArrayList给定错误(加上方法帮助)

Java ArrayList给定错误(加上方法帮助),java,arrays,arraylist,java.util.scanner,Java,Arrays,Arraylist,Java.util.scanner,嗨,我在用扫描仪和arraylist做作业 数据包对象具有唯一的ID号、重量(以磅为单位,带2位小数)以及目的地和来源地的状态缩写。 类Packet描述一个数据包,并分别具有int、double、String和String类型的变量idNumber、weight、stateDest和stateOrig。此外,它还有以下方法 •布尔isHeavy,当数据包超过10磅时返回true,否则返回false。 •布尔isInState,当数据包发送到与原始状态相同的目标状态时返回true。 •String

嗨,我在用扫描仪和arraylist做作业

数据包对象具有唯一的ID号、重量(以磅为单位,带2位小数)以及目的地和来源地的状态缩写。 类Packet描述一个数据包,并分别具有int、double、String和String类型的变量idNumber、weight、stateDest和stateOrig。此外,它还有以下方法 •布尔isHeavy,当数据包超过10磅时返回true,否则返回false。 •布尔isInState,当数据包发送到与原始状态相同的目标状态时返回true。 •String toString返回字符串,该字符串是数据包对象的一行字符串表示形式。 •double getWeight返回数据包重量

创建一个名为packetData.txt的输入文件,包含以下7行内容。packetData.txt文件中的每一行都有关于一个数据包对象的信息

1001 8.37 CA MO
1002 2.17 CT CA
1003 11.35 NY NY
1004 3.77 MA MA
1005 9.99 FL CT
1006 14.91 VT MA 
1007 4.97 TX CA
类包具有shipmentList和totalWeight变量

名为shipmentList的变量包含所有数据包的集合

变量shipmentList为ArrayList类型

ArrayList中的所有对象都是数据包类型

Totalweight变量指定所有数据包的总重量

构造函数分配变量shipmentList和totalWeight

变量totalWeight在类中声明时初始化为0.0,并在从文件读取每个数据包时更新

变量shipmentList是通过从上面指定的输入文件中读取数据来分配的

文件中的每一行都有关于一个数据包对象的数据

当您从输入文件中的一行读取数据时,应将数据包对象添加到shipmentList类数据包具有以下方法:

•String-toString,返回整个数据包集合的字符串表示形式,每行指定一个数据包对象

•void displayHeavyPackages显示所有重数据包

•void display instatepackages,它显示具有相同名称的所有数据包 起源国和目的地国。您的代码必须使用方法isInState

•数据包显示MaxWeightPacket返回最重的数据包对象

•void displayAverageWeight显示所有数据包的两位小数的平均重量。使用完整的句子

所有方法都是使用变量shipmentList和totalWeight编写的。 除了类和包之外,您的应用程序还应该具有只包含main方法的类TestPackages

将方法字符串destinationLocation添加到数据包类。如果目标状态是CT、MA、RI或NY中的一个,则方法返回字符串Local,并为所有其他状态返回字符串NonLocal

将方法添加到包类: •void displayLocalPackets,它显示一个空行,然后标题本地数据包,然后显示发送到任何本地州的所有本地数据包,每行显示一个数据包。必须在代码中使用方法destinationLocation

•void displayNonLocalPackets,显示未发送到本地目的地的所有数据包。 必须使用方法destinationLocation来编写代码

我已经尽可能多地实现了,但是我的两个类中出现了不兼容的类型错误

import java.util.ArrayList;
import java.io.IOException;
import java.util.Scanner;
import java.io.*;
public class Packages
{
    public ArrayList shipmentList;
    double totalWeight = 0.0;
    private int counter = 0;
    public Packages() throws IOException
    {
       ArrayList<Packet> shipmentList = new ArrayList<Packet>();
       String currentPacket;
       Scanner fileScan, packetScan;
       Scanner scan = new Scanner (System.in); //start scanner
       Scanner fileInput = new Scanner(new File("packetData.txt"));//file input
       while (fileInput.hasNextLine())
       {
           currentPacket = fileScan.nextLine();
           packetScan = new Scanner (currentPacket);
           int id = packetScan.nextInt();
           double w = packetScan.nextDouble();
           String s = packetScan.next();
           String d = packetScan.next();
           Packet temp = new Packet (id, w, s, d);
           shipmentList.add(temp);
       }
       scan.close();
    }
    public void displayHeavyPackages()
    {
       System.out.println("The heavy packages are : ");
       for(Packet mypacket : shipmentList)
       {
         if (mypacket.isHeavy())
         {
           System.out.println(mypacket);
         }
       }
    }
    public void displayInStatePackages()
    {
       System.out.println("These are the In-State Packages : ");
       for(Packet mypacket : shipmentList)
       {
         if (mypacket.isInState())
         {
           System.out.println(mypacket);
         }
       }
    }
    public void displayAverageWeight()
    {
       double hold;
       int count;
       for(Packet mypacket : shipmentList)
       {
           hold += mypacket.weight;
           count++; 
       }
       System.out.println("The average weight is " + totalWeight);
    }
    public String toString()
    {
       String result = "The shipment \n";    
       for(Packet mypacket : shipmentList)
       {
          result += mypacket;
        }
       return result;
    }
    public Packet maxWeightPacket()
    {

    }
    public void displayLocalPackets()
    {
       System.out.println("");
       System.out.println("Local Packages");
       for(Packet mypacket : shipmentList)
       {
           if (mypacket.destinationLocation())
           {
               System.out.println(mypacket);
           }
       }
    }
    public void displayNonLocalPackets()
    {
       System.out.println("");
       System.out.println("Non Local Packages");
       for(Packet mypacket : shipmentList)
       {
           if (mypacket.destinationLocation())
           {
               System.out.println(mypacket);
           }
       }
    }
}
测试班

import java.io.*;
public class TestPackages 
{
    public static void main (String[] args) throws IOException 
    {
       Packages shipment = new Packages();
       System.out.println(shipment);
       shipment.displayHeavyPackages();
       shipment.displayInStatePackages();
       shipment.maxWeightPacket();
       shipment.displayAverageWeight() 
    } 
}
您正在隐藏shipmentList变量,因此请更改

public class Packages
{
    public ArrayList shipmentList;

对displayNonLocalPackets进行类似的更改

更多

还要学习如何比较字符串提示:returnstatedest==stateOrig;这是错误的

平均权重的方法是错误的,您应该使用计算的变量

public void displayAverageWeight()
{
   double hold;
   int count;
   for(Packet mypacket : shipmentList)
   {
       hold += mypacket.weight;
       count++; 
   }
   System.out.println("The average weight is " + hold / count);
}

您已经定义了public ArrayList shipmentList;作为字段,但随后在构造函数中将其重新定义为ArrayList shipmentList=new ArrayList;您正在向其中添加数据。移动此ArrayList shipmentList=新建ArrayList;作为替换公共ArrayList shipmentList的字段;顺便说一句,如果mypacket.destinationLocation无法工作,因为destinationLocation返回字符串,那么问题中的文本量实际上不是一个问题,而是一个故事,那么这些错误将为您突出显示。我将如何修复这些错误,我试图理解为什么它不能做到这一点,只有在这个方法。谢谢你的帮助,修复了大部分问题。现在我试着通过完成AvaragePacket和maxPacket方法来结束。我正在收集总重量,但不知道如何在方法中使用它。pastebin.com/gXLK3khH总重采集-第22行平均法-第54行最大重量-第74行感谢您的帮助,解决了大部分问题,而不是感谢我,不如投票表决和/或接受此答案如何
public class Packages
{
    ArrayList<Packet> shipmentList = new ArrayList<Packet>();
  ArrayList<Packet> shipmentList = new ArrayList<Packet>();
if (mypacket.destinationLocation().equalsIgnoreCase ("local"))
public void displayAverageWeight()
{
   double hold;
   int count;
   for(Packet mypacket : shipmentList)
   {
       hold += mypacket.weight;
       count++; 
   }
   System.out.println("The average weight is " + hold / count);
}