我是JAVA的初学者,刚刚开始学习这门语言。我在How to initialize an array in Java?线程进行了研究,但无法找到解决方案。
我的目标是在声明所有变量时初始化数组,然后在程序中稍后设置值(原因是我想保持代码清洁,即我不想初始化并在同一时间设置值。)具体来说,我不是要同时声明和设置值,而是在不同的时间。
这里是我的代码,其中包含从上述SO线程中学到的不同选项:
import csv
from itertools import chain
csv_input_filenames = [
'csvfile1.csv',
'csvfile2.csv',
'csvfile3.csv',
]
csv_output_filename = 'csv_out.csv'
# get the csv data
csv_files = [open(file_name) for file_name in csv_input_filenames]
csv_handles = [csv.reader(csv_file) for csv_file in csv_files]
rows = (list(chain(*row)) for row in zip(*csv_handles))
# write combined output
with open(csv_output_filename, 'wb') as csv_file:
filenames_header = list(chain(
*zip(csv_input_filenames, [''] * len(csv_input_filenames))))
csv_writer = csv.writer(csv_file)
csv_writer.writerow(filenames_header)
for row in rows:
csv_writer.writerow(row)
# close input files
for csv_file in csv_files:
csv_file.close()
正如我们上面所见,我可以(在选项1中)使用public class AutoArray {
public static void main(String[] args) {
//Option 1
int[] Array1 = new int[4]; //Declare
Array1[0] = 3; //Set individual elements. Fine but repetitive.
Array1[1] = 4;
Array1[2] = 5;
Array1[3] = 6;
System.out.println("Array1 is:"+Array1);
//Option 2
int Array3[] = {3,4,5,6}; //Declare and set at the same time. Not good.
System.out.println("Array3 is:"+Array3);
//Option 3
int Array5[] = new int[3];
Array5[] = {3,5,11}; //Won't compile
}
}
设置数组的各个元素,其中Array[i] = XYZ
或(在选项2中)设置声明时的值阵列。
但是,我想做一些我在选项3中尝试过的事情 - 即。稍后使用花括号设置值。我不想重复设置单个元素的代码,因为它看起来很笨或不能使用i<4
循环,因为值不会遵循模式。
我能做些什么吗?我很感激任何想法。
答案 0 :(得分:3)
数组具有固定的大小,因此您稍后执行此操作时将创建一个新数组(即,您的初始值可以是null
)。接下来,你在这里看合成糖
int Array3[] = { 3, 4, 5, 6 };
等同于(并且只有在声明时允许更短的形式)
int Array3[] = new int[] { 3, 4, 5, 6 };
所以,你可以做
int Array5[] = null;
Array5 = new int[] { 3, 5, 11 };
答案 1 :(得分:-2)
//Option 3
int Array5[] = new int[3];//Array5 to be an object.
Array5[] = {3,5,11}; //after this ,Array5 become another object.
//'{3,5,11}' means 'new int[]{3,5,11}'