Java 将文本文件中给定的两个数组合并为第三个数组
是的,这是家庭作业。简单地说,因为我的教授不擅长措辞 我得到了一个这样的文本文件Java 将文本文件中给定的两个数组合并为第三个数组,java,arrays,text,merge,int,Java,Arrays,Text,Merge,Int,是的,这是家庭作业。简单地说,因为我的教授不擅长措辞 我得到了一个这样的文本文件 11 -5 -4 -3 -2 -1 6 7 8 9 10 11 8 -33 -22 -11 44 55 66 77 88 这是作为sortedarray.txt提供的 第一行是数组1,第二行是数组2,每行的第一个int是数组的大小,因此: int a[] = new int[11] int b[] = new int[8] 我的第一个问题是将其读入程序,我假设run作为一个参数,但我的问题是在每行之间解密并加载
11 -5 -4 -3 -2 -1 6 7 8 9 10 11
8 -33 -22 -11 44 55 66 77 88
这是作为sortedarray.txt提供的
第一行是数组1,第二行是数组2,每行的第一个int是数组的大小,因此:
int a[] = new int[11]
int b[] = new int[8]
我的第一个问题是将其读入程序,我假设run作为一个参数,但我的问题是在每行之间解密并加载数组
我相信我有一个比较a和b元素并加载到c中的好方法,但是有人能看一下吗
再次感谢这个网站,我已经搜索过了,看到了这个程序,但是元素已经从一个文本文件中给出或没有给出
// ************************************************************
// MergeArray.java
//
// Written by: Brandon Pham
//
//
//
//
// Homework 6
// ************************************************************
import java.io.*;
import java.util.*;
public class MergeArray {
String arrayfile = "SortedArrays.txt";
MergeArray(String arrayfile){
try {
Scanner arrayload = new Scanner(File(arrayfile));
}
catch (FileNotFoundException e) {
System.out.printf("File %s not found, exiting!",
arrayfile);
System.exit(0);
}
int[] a = new int[arrayload.nextint()];
int[] b = new int[arrayload.nextLine()];
int[] c = new int[a.length+b.length];
}
public static void merge(int[]a, int[]b, int[]c) {
int i=0,j=0,k=0;
int alength = a.length;
int blength = b.length;
while (k<c.length){
if (a[i] < b[j]){
c[k] = a[i];
k++;
i++;
}
if (a[i] == b[j]){
c[k]=a[i];
c[k++]=b[j];
i++;
j++;
if (i+1>a.length){
c[k]=b[j];
k++;
j++;
}
if (j+1>b.length){
c[k]=a[i];
k++;
i++;
}
else{
c[k] = b[j];
k++;
j++;
}
}
}
/************************************************************************************
//MergeArray.java
//
//作者:布兰登·范
//
//
//
//
//家庭作业6
// ************************************************************
导入java.io.*;
导入java.util.*;
公共类合并数组{
String arrayfile=“sortedarray.txt”;
合并数组(字符串数组文件){
试试{
Scanner arrayload=新扫描仪(文件(arrayfile));
}
catch(filenotfound异常){
System.out.printf(“未找到文件%s,正在退出!”,
阵列文件);
系统出口(0);
}
int[]a=新的int[arrayload.nextint()];
int[]b=新的int[arrayload.nextLine()];
int[]c=新的int[a.length+b.length];
}
公共静态无效合并(int[]a、int[]b、int[]c){
int i=0,j=0,k=0;
int alength=a.长度;
int-blength=b.长度;
while(ka.长度){
c[k]=b[j];
k++;
j++;
}
如果(j+1>b.长度){
c[k]=a[i];
k++;
i++;
}
否则{
c[k]=b[j];
k++;
j++;
}
}
}
您的文件读取效果良好。但是,输出的排序可能要简单一些:
下面是一些快速代码:
int[] result = new int[array1.length+array2.length]
int cursor1 = 0;
int cursor2 = 0;
for(int = 0; i < result.length; i++) {
if(cursor1 > array1.length-1){
result[i] = array2[cursor2++];
} else if(cursor2 > array2.length-1){
result[i] = array1[cursor1++];
} else if(array1[cursor1] > array2[cursor2]){
result[i] = array1[cursor1];
cursor1++;
} else {
result[i] = array2[cursor2];
cursor2++;
}
}
int[]结果=新的int[array1.length+array2.length]
int cursor1=0;
int cursor2=0;
for(int=0;i阵列1.长度-1){
结果[i]=array2[cursor2++];
}else if(光标2>阵列2.长度-1){
结果[i]=array1[cursor1++];
}else if(array1[cursor1]>array2[cursor2]){
结果[i]=array1[cursor1];
游标1++;
}否则{
结果[i]=array2[cursor2];
游标2++;
}
}
我只是在浏览器中编写了这个代码,所以我肯定不会保证语法正确;)
希望这对您有所帮助,请再次询问更多详细信息,并随时发布您的进度。尝试以下方法:一次阅读一行,使用空格拆分该行以获取该行中的数字数组,将所有条目添加到列表中,因为列表具有开放式结尾。最后从列表中获取数组
String line;
List<String> list = new ArrayList<String>();
while(arrayload.hasNextLine()){
line = arrayload.nextLine();
String[] nums = line.split(" ");
list.addAll(Arrays.asList(nums));
}
String[] finalNums = list.toArray(new String[]{});
字符串行;
列表=新的ArrayList();
while(arrayload.hasNextLine()){
line=arrayload.nextLine();
字符串[]nums=line.split(“”);
addAll(Arrays.asList(nums));
}
字符串[]finalNums=list.toArray(新字符串[]{});
您面临什么问题?对于OP Scanner类使用的任务,使用nextInt方法是最好的选择。@Vash您知道吗,您完全正确。我正在修正我的答案。