Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 如何在1d数组中打印额外元素而不出现绑定异常?_Java_Arrays - Fatal编程技术网

Java 如何在1d数组中打印额外元素而不出现绑定异常?

Java 如何在1d数组中打印额外元素而不出现绑定异常?,java,arrays,Java,Arrays,开始时,我读取文件并使用split()方法,将每个值存储在1d数组中。我必须将索引0和1存储在字符串值中,索引2、3和4必须存储在1d数组中,因为“supervisor”对象参数包含两个字符串值(名称和id)和1d数组(兴趣)。问题在于第0行有一个额外兴趣(3个兴趣),第1行和第2行有两个兴趣。 我考虑的是将兴趣存储在arraylist中(因为大小不是静态的),然后将其转换回1d数组,但它不起作用 尝试将兴趣存储在2d数组中,并将t转换回1d数组,但不起作用,同时拆分我拆分的文件(,和#),但我

开始时,我读取文件并使用split()方法,将每个值存储在1d数组中。我必须将索引0和1存储在字符串值中,索引2、3和4必须存储在1d数组中,因为“supervisor”对象参数包含两个字符串值(名称和id)和1d数组(兴趣)。问题在于第0行有一个额外兴趣(3个兴趣),第1行和第2行有两个兴趣。 我考虑的是将兴趣存储在arraylist中(因为大小不是静态的),然后将其转换回1d数组,但它不起作用 尝试将兴趣存储在2d数组中,并将t转换回1d数组,但不起作用,同时拆分我拆分的文件(,和#),但我注意到在每个兴趣的末尾都有一个# 因此,我保留了#,并考虑在读取文件时是否可以执行if条件。有什么简单的方法可以避免这个错误吗

文件supervisor.txt包含:

00023, Dr. Haneen,  artificial intelligent, data mining, pattern recognition#
00013, Dr. Manar, database, network#
00011, Dr. Hajar, software engineering, games#
代码

publicstaticvoidmain(字符串[]args)引发异常{
文件管理器文件=新文件(“supervisor.txt”);
如果(!supervisorFile.exists()){
System.out.println(“对不起,找不到文件!”;//检查文件是否存在,如果没有,则终止程序
系统出口(0);
}
supervisor sup=null;
字符串[]supArray=null;
Scanner superad=新扫描仪(管理器文件);//读取管理器文件
while(superad.hasNext()){
supArray=suprad.nextLine().split(“,”);
sup=添加管理器(supArray);
//System.out.println(sup.toString());
}
}
公共静态监控器addSupervisor(字符串[]arr){
字符串id=arr[0];
字符串名称=arr[1];
字符串[]利息=新字符串[3];
对于(inti=0;i
第二行和第三行只有4个字符串,用逗号分隔。这使得它在数组中有4个字符串。在addSupervisor方法中,您试图访问第5个字符串arr[4],该字符串超出了边界。

您的第二行和第三行只有4个字符串,用逗号分隔。这使得它在数组中有4个字符串。在addSupervisor方法中,您试图访问第5个字符串arr[4],该字符串超出了界限。

解决方案是使用带限制参数的
拆分

class Supervisor{
    final String id;
    final String name;
    String[] fields;

    Supervisor(String id, String name, String[] fields) {
        this.id = id;
        this.name = name;
        this.fields = fields;
    }
}

Path path = Paths.get("supervisor.txt");
List<Supervisor> supervisors = Files.lines(path, Charset.defaultCharset())
    .filter(l -> l.endsWith("#"))
    .map(l -> l.substring(0, l.length() - 1)) // Remove #
    .map(l -> l.split(",\\s*", 3)) // "00013", "Dr. Manar", "database, network"
    .filter(w -> w.length == 3)
    .map(w -> new Supervisor(w[0], w[1], w[2].split(",\s*")))
    .collect(Collectors.toList());
班主任{
最终字符串id;
最后的字符串名;
字符串[]字段;
主管(字符串id、字符串名称、字符串[]字段){
this.id=id;
this.name=名称;
this.fields=字段;
}
}
Path Path=Path.get(“supervisor.txt”);
列表管理器=Files.lines(路径,Charset.defaultCharset())
.filter(l->l.endsWith(“#”)
.map(l->l.substring(0,l.length()-1))//删除#
.map(l->l.split(“,\\s*”,3))/“00013”,“Manar博士”,“数据库,网络”
.filter(w->w.length==3)
.map(w->新主管(w[0],w[1],w[2]。拆分(“,\s*”)
.collect(Collectors.toList());

解决方案是使用带有限制参数的
拆分

class Supervisor{
    final String id;
    final String name;
    String[] fields;

    Supervisor(String id, String name, String[] fields) {
        this.id = id;
        this.name = name;
        this.fields = fields;
    }
}

Path path = Paths.get("supervisor.txt");
List<Supervisor> supervisors = Files.lines(path, Charset.defaultCharset())
    .filter(l -> l.endsWith("#"))
    .map(l -> l.substring(0, l.length() - 1)) // Remove #
    .map(l -> l.split(",\\s*", 3)) // "00013", "Dr. Manar", "database, network"
    .filter(w -> w.length == 3)
    .map(w -> new Supervisor(w[0], w[1], w[2].split(",\s*")))
    .collect(Collectors.toList());
班主任{
最终字符串id;
最后的字符串名;
字符串[]字段;
主管(字符串id、字符串名称、字符串[]字段){
this.id=id;
this.name=名称;
this.fields=字段;
}
}
Path Path=Path.get(“supervisor.txt”);
列表管理器=Files.lines(路径,Charset.defaultCharset())
.filter(l->l.endsWith(“#”)
.map(l->l.substring(0,l.length()-1))//删除#
.map(l->l.split(“,\\s*”,3))/“00013”,“Manar博士”,“数据库,网络”
.filter(w->w.length==3)
.map(w->新主管(w[0],w[1],w[2]。拆分(“,\s*”)
.collect(Collectors.toList());

由于尝试使用
arr[4]
,因此出现错误,但第2行和第3行的数组大小都是4,因此可以使用的最大索引是3

我不知道sue的主管是什么,但这行得通吗:

public static supervisoraddSupervisor(String[]arr){
    String id=arr[0];
    String name=arr[1];
    String[] interest=new String[arr.length - 2];

    for (int i = 0; i < interest.length; i++) { 
        interest[i]=arr[i + 2]; 
    }

    return new supervisor(id,name,interest);
}
publicstaticsupervisoradsupervisor(字符串[]arr){
字符串id=arr[0];
字符串名称=arr[1];
字符串[]利息=新字符串[arr.length-2];
对于(inti=0;i

由于尝试使用
arr[4]
,因此会出现错误,但是第2行和第3行的数组大小都是4,因此可以使用的最大索引是3

我不知道sue的主管是什么,但这行得通吗:

public static supervisoraddSupervisor(String[]arr){
    String id=arr[0];
    String name=arr[1];
    String[] interest=new String[arr.length - 2];

    for (int i = 0; i < interest.length; i++) { 
        interest[i]=arr[i + 2]; 
    }

    return new supervisor(id,name,interest);
}
publicstaticsupervisoradsupervisor(字符串[]arr){
字符串id=arr[0];
字符串名称=arr[1];
字符串[]利息=新字符串[arr.length-2];
对于(inti=0;i
使用拆分和阵列列表

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import lombok.AllArgsConstructor;

@AllArgsConstructor
class Supervisor {

    String id;
    String name;
    List<String> interest;

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.NO_CLASS_NAME_STYLE);
    }
}

public class AMain {

    public static void main(String[] args) {
        String id, name, line;
        String[] arr;
        List<String> list = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader("file/supervisor.txt"))) {
            while ((line = br.readLine()) != null) {
                arr = line.trim().split(",");
                list.addAll(Arrays.asList(arr));
                if (list.size() > 2) {
                    id = list.get(0); // get id
                    list.remove(0); // remove id 
                    name = list.get(0); // get name
                    list.remove(0); // remove name
                    System.out.println(new Supervisor(id, name, list));
                }
                list.clear(); // clear all
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
使用拆分列表(&A)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import lombok.AllArgsConstructor;

@AllArgsConstructor
class Supervisor {

    String id;
    String name;
    List<String> interest;

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.NO_CLASS_NAME_STYLE);
    }
}

public class AMain {

    public static void main(String[] args) {
        String id, name, line;
        String[] arr;
        List<String> list = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader("file/supervisor.txt"))) {
            while ((line = br.readLine()) != null) {
                arr = line.trim().split(",");
                list.addAll(Arrays.asList(arr));
                if (list.size() > 2) {
                    id = list.get(0); // get id
                    list.remove(0); // remove id 
                    name = list.get(0); // get name
                    list.remove(0); // remove name
                    System.out.println(new Supervisor(id, name, list));
                }
                list.clear(); // clear all
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

首先,你应该获得线路,然后像你一样使用它。问题在于你假设所有的“主管”都有3种兴趣。此外,您还将所有感兴趣的内容存储在阵列的第一个pos中:

for (int i = 0; i < interest.length; i++) { //here i tried to store all the interests
        interest[i]=arr[2]+arr[3]+arr[4]; 
}

最后一条建议是,Java类名称必须以大写字母开头。因此,你应该将你的班级名称“supervisor”改为“supervisor”

首先,你应该得到这条线,然后像你一样使用它。问题在于你假设所有的“主管”都有3种兴趣。此外,您还将所有感兴趣的内容存储在阵列的第一个pos中:

for (int i = 0; i < interest.length; i++) { //here i tried to store all the interests
        interest[i]=arr[2]+arr[3]+arr[4]; 
}

最后一条建议是,Java类名称必须以大写字母开头。所以你应该把你班的名字“supervisor”改为“supervisor”

你想把所有的字符串都分在同一行吗?你想把所有的字符串都分在同一行吗?非常感谢,这很管用,但我想知道为什么我们要