【发布时间】:2021-04-18 09:55:02
【问题描述】:
问题:据了解,我已经在方法中定义了原始数组,该数组在另一种方法和 main 中读取。当我尝试复制到新数组时,似乎会产生一个问题,无法将 +1 添加到 arraycopy。如果我跳过新数组,一切都会按预期工作。可以轻松创建打印arraycopy的方法。还是只在 main 中创建数组会更好?
错误: 我知道我的问题在这里:(大量图片)。 ArrayCopyError
- 如果 (names.length
- 我可能把 ArrayCopy 弄复杂了。 1.1 我在方法 readFile 中定义了第一个数组名称名称,其余的在 main Name[] names = readFile("names.txt") 中定义。是的,所有数组元素都在文件中,因此不会在 switch case 1 之外创建任何元素。
readFile:(没有 arrayCopy 它按预期工作)。 Array def 1
Main def 2.(没有 arrayCopy 它按预期工作)。 enter image description here
我应该做什么: // 创建一个大小为 n+1 的新数组,其中 n 是原始数组的大小。 我知道我必须测量 names.length 并创建相同大小的副本并加 1。 如图所示,我尝试添加 1,但它并不喜欢它。
// Add the n elements of the original array in this array.
Some variant of:
copyArray = names[0];
copyArray = names[1]
continue....
可能不是我可以在文件中添加对象以进行复制的最佳方式,但它是一个循环,因此可能会添加新对象。
// Add the new element in the n+1 position.
// Print the new array.
Could be same as method: printNames
试过了: 我试过这个,它与我的关系最密切,但我 将其转换为 String,我不得不更改 copyArray[i] = intArray[i];复制数组[0]++;我认为这与 readFile 有关。还删除了数组的打印,因为我确实有 方法 printNames(Name[]names)。可能会创建相同的方法,但对于 arraycopy。 Try1
Try1 and Try2 is from this website
Potential candidate Stream API
String[] strArray = {"orange", "red", "green'"};
String[] copiedArray = Arrays.stream(strArray).toArray(String[]::new);
在文本文件中: 斯波克尼莫伊
西娜战士
简泰山
菲尔·柯林斯
尹基RM
王杰
/**
*
*/
package fileObjectTutorial;
import java.io.*;
import java.util.*;
/**
* @author
*
*/
public class FileObjectTutorial {
/**
* @param args
*/
public static void main(String[] args)throws FileNotFoundException {
//read file
Name[] names = readFile("names.txt");
//print names
printNames(names);
String fNamn;
String eNamn;
int fortsatta = 0;
int counter = 0;
int val;
Scanner scanObj = new Scanner(System.in);
while(fortsatta == 0){
System.out.println("Fyll i:\n1 Add name\n2 " + "closed\n3 " + "closed\n4 " + "closed");
val = scanObj.nextInt();
switch(val){
case 1:
System.out.println("1");
for(int i =0; i<names.length; i++) {
if (names.length <= 24) {
String copyNames [] = new String[names.length];
System.out.println("Type in firstname and lastname: ");
Scanner copy = new Scanner(System.in);
fNamn = copy.next();
eNamn = copy.next();
Name k_obj = new Name(fNamn, eNamn);
names[counter] = k_obj;
counter++;
if(names != null || copyNames != null) {
// System.out.print(names[i] + " ");
// System.out.print(copyNames[i] + " ");
copy.close();
}
}
else
{
counter = names.length-1;
System.out.println("Array is full");
}
}
break;
case 2:
System.out.println(".");
case 3:
System.out.println(".");
break;
case 4:
System.out.println(".");
break;
default:
System.out.println(".");
} //slut switchsats
System.out.println("Go 0 Stop 1");
fortsatta = scanObj.nextInt();
}
scanObj.close();
System.out.println("end");
}
public static void printNames(Name[]names){
//iterate throught array
for(Name n : names){
//print each name
if (n != null)
System.out.println(n);
}
}
public static Name[] readFile(String filename) throws FileNotFoundException{
Name[] list = new Name[25];
int count = 0;
//open file
File fileNames = new File(filename);
if(fileNames.canRead()){
//get scanner on file
Scanner namedata = new Scanner(fileNames);
//sentinel loop on hasNext
while (namedata.hasNext()){
//read firstname
String namefirst = namedata.next();
//read lastname
String namelast = namedata.next();
//build the name and put in array
list[count] = new Name(namefirst, namelast);
count++;
}
namedata.close();
}
//return array
return list;
}
}
class Name {
String firstName;
String lastName;
//constructor
/**
* null constructor - empty name
*/
public Name(){
this.setFirstName("");
this.setLastName("");
}
/**
* full constructor based on first and last name
*/
public Name(String firstName, String lastName){
this.setFirstName(firstName);
this.setLastName(lastName);
}
//getters & setters
/**
* get the first name
*/
public String getFirstName(){
return this.firstName;
}
/**
* get the last name
*/
public String getLastName(){
return this.lastName;
}
/**
* set the first name
*
* @param firstName
*/
public void setFirstName(String firstName){
this.firstName = firstName;
}
/**
* set the last name
*
* @param lastName
*/
public void setLastName(String lastName){
this.lastName = lastName;
}
//toString
//toString
public String toString(){
return "Name [firstName = " + this.getFirstName() + ", lastname = " +
this.getLastName() + "]";
}
}
【问题讨论】:
标签: java arrays methods switch-statement copy