我有一个方法来读取IntegerArray,它是一个类,输入是InputStream。我尝试使用扫描仪,但仍坚持填写数组并创建return语句以正确方式输出它。我真的很想知道转换的工作方式,这是我第一次遇到这种问题,因为我对Java真的很陌生,所以请放轻松。我到目前为止所得到的:
public class ArrayReader {
public static IntegerArray readIntArray(InputStream input) {
Scanner scanner = new Scanner(input);
scanner.nextInt();
int size = 0;
int[] iarr;
while(scanner.hasNextInt()) {
size++;
scanner.nextLine();
}
}
}
import java.util.Arrays;
public final class IntegerArray {
private int[] a;
public IntegerArray(int[] a) {
this.a = a;
}
public int length() {
return a.length;
}
public int getElementAt(int i) {
return a[i];
}
public int sum() {
int sum = 0;
for(int i: a) {
sum += i;
}
return sum;
}
public double average() {
int i, sum = 0, armean;
for(i = 0; i < a.length; i++) {
sum = sum + a[i];
}
armean = sum / i;
return armean;
}
public IntegerArray getSorted() {
int[] b = a.clone();
Arrays.sort(b);
return new IntegerArray(b);
}
public IntegerArray contact(IntegerArray ia) {
int[] newA = new int[a.length + ia.length()];
for(int i = 0; i < ia.a.length; i++) {
newA[i] = a[i];
}
for(int j = 0; j < ia.a.length; j++) {
newA[j + a.length] = ia.a[j];
}
return new IntegerArray(newA);
}
@Override
public String toString() {
return a.toString();
}
}
答案 0 :(得分:2)
使用Java 8,您可以像这样编写方法,
public class ArrayReader {
public static IntegerArray readIntArray(InputStream input) {
Scanner scanner = new Scanner(input);
List<Integer> intList = new ArrayList<Integer>();
while (scanner.hasNextInt()) {
intList.add(scanner.nextInt());
}
scanner.close();
return new IntegerArray(intList.stream().mapToInt(Integer::intValue).toArray());
}
public static void main(String args[]) throws Exception {
FileInputStream fin = new FileInputStream("num.txt");
IntegerArray integerArray = readIntArray(fin);
System.out.println(integerArray.sum());
System.out.println(integerArray.average());
fin.close();
}
}
在当前目录中创建一个文件名类似num.txt的文本文件,在其中添加一些数字,运行代码并享受输出。
编辑:
此行的说明。
IntegerArray(intList.stream().mapToInt(Integer::intValue).toArray());
您的IntegerArray类声明了一个构造器,该构造器接受这样的本机int数组,
public IntegerArray(int[] a) {
this.a = a;
}
但是读取的数字存储在List<Integer>
对象中,因此该列表需要转换为int[]
,在这里,
intList.stream().mapToInt(Integer::intValue).toArray()
是必需的。
它基本上是从intList
创建一个流,然后mapToInt(Integer::intValue)
方法将Integer对象流转换为本地int编号流,最后使用int[]
作为toArray()
进行收集。方法,这是我们旨在根据您的构造函数需要获取的方法。
是否已使用包装器Integer类声明了构造函数,
public IntegerArray(Integer[] a) {
this.a = a;
}
那么我们只需编写一下就可以实现
new IntegerArray(intList.toArray(new Integer[intList.size()]))
希望有帮助。
答案 1 :(得分:0)
不是最好的,但是它可以工作
public class ArrayReader {
public static IntegerArray readIntArray(InputStream input) {
try(Scanner scanner = new Scanner(input)){
List<Number> inputList = new LinkedList<>();
while(scanner.hasNextInt()) {
inputList.add(scanner.nextInt());
}
int[] iarr = new int[inputList.size()];
for (int i = 0; i < inputList.size(); i++) {
iarr[i] = inputList.get(i).intValue();
}
return new IntegerArray(iarr);
}
}
}