Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 什么';在这种情况下,保存响应集的更好方法是什么?_Java_Arrays_Save - Fatal编程技术网

Java 什么';在这种情况下,保存响应集的更好方法是什么?

Java 什么';在这种情况下,保存响应集的更好方法是什么?,java,arrays,save,Java,Arrays,Save,我正在用Java构建一个CLI调查应用程序,它允许用户回答多项选择题。请告诉我如何改进我的方法 每个问题的答案都记录为int,int是该问题选项数组中该选项的索引。调查的所有答案都保存为整数数组。我正在考虑使用ObjectOutputStream序列化这个int数组。然后,当我需要显示结果时,我将恢复数组并在选项卡后打印每个元素 这种方法的问题是(我相信)第二组回答覆盖了第一组。我想到了两个选择,两个听起来都很糟糕。一种是将每个响应集保存到单独的文件中。但到了显示时间,我必须一次读取所有文件,以

我正在用Java构建一个CLI调查应用程序,它允许用户回答多项选择题。请告诉我如何改进我的方法

每个问题的答案都记录为int,int是该问题选项数组中该选项的索引。调查的所有答案都保存为整数数组。我正在考虑使用ObjectOutputStream序列化这个int数组。然后,当我需要显示结果时,我将恢复数组并在选项卡后打印每个元素

这种方法的问题是(我相信)第二组回答覆盖了第一组。我想到了两个选择,两个听起来都很糟糕。一种是将每个响应集保存到单独的文件中。但到了显示时间,我必须一次读取所有文件,以便将同一个问题的回答放在一起。另一种方法是将int数组保存为纯文本文件中以制表符分隔的行(因此每个响应集生成一个新行),然后标记并将其解析回int数组以显示。但是标记化/解析代码读起来很恐怖(目前看起来是这样的):

编辑:哎呀,这个代码根本不对。我的观点是,解析是一团糟,所以我正在寻找一种不必解析的方法

File savedResults = new File(Main.surveyResultsFolder, surveyFileName);
try {
    BufferedReader br = new BufferedReader(new FileReader(savedResults));
    int[] currentResponseSet = new int[noOfQuestions];
    String currentResponseString = "";
    String[] currentResponseStrArray = null;
    while((currentResponseString = br.readLine()) != null) {
        currentResponseStrArray = currentResponseString.split("\t");

    for (int i = 0; i < currentResponseStrArray.length; i++) {
        currentResponseSet[i] = Integer.parseInt(currentResponseStrArray[i]);
}
    }
     //then I'll print currentResponseSet here.
    }
catch (IOException ex) {
    System.out.println("Error reading results file " + surveyFileName);
}
File savedResults=新文件(Main.surveyResultsFolder,surveyFileName);
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(savedResults));
int[]currentResponseSet=新int[noOfQuestions];
字符串currentResponseString=“”;
字符串[]CurrentResponseStrray=null;
while((currentResponseString=br.readLine())!=null){
CurrentResponseStrray=currentResponseString.split(“\t”);
对于(int i=0;i

我没有主意了。如您所见,我对数据处理技术的知识有限。有人吗?

最明显的做法是将其保存到数据库中。那么存储和检索就非常简单了


如果你出于任何原因不能做到这一点,那么我认为你目前的解决方案是可行的。我觉得你的解析代码很简单。我将创建一个单独的函数来解析一行,该行返回一行的响应数组,然后让调用者用它做任何需要做的事情,只是为了干净的模块化。

最明显的做法是将它保存到数据库中。那么存储和检索就非常简单了

如果你出于任何原因不能做到这一点,那么我认为你目前的解决方案是可行的。我觉得你的解析代码很简单。我将创建一个单独的函数来解析一行,该行返回一行的响应数组,然后让调用者用它做任何需要做的事情,只是为了干净的模块化。

几点:

  • 使用ObjectOutputStream保存数据通常是个坏主意。以人类可读的形式保存数据是一个更好的选择
  • 我不明白为什么你认为你的解析逻辑是“恐怖的”——当然你可以稍微清理一下代码,但从根本上说,它似乎还可以
  • 您是否考虑过将数据存储在数据库中。。。关系还是其他
  • 我将使用问题ID,而不是使用数组索引位置将答案与问题联系起来。这样,调查可以随着时间的推移而发展,您仍将拥有半可用的数据。至少,你会有一个部分完整的答案。如果您想要这种结构的最小持久性形式,一个想法是在每行文本中存储{record,question,answer}。读取数据将生成
    地图
    。您可以在此处找到有用的“自动映射”结构:
  • 公共抽象类自动映射 扩展树映射{ 受保护的抽象V createValue(); public V getOrCreate(K键){ V值=获取(键); 如果(值==null){ value=createValue(); put(键、值); } 返回值; } } 公共类映射 扩展自动映射{ 受保护的映射createValue(){ 返回新树映射(); } } 有几点:

  • 使用ObjectOutputStream保存数据通常是个坏主意。以人类可读的形式保存数据是一个更好的选择
  • 我不明白为什么你认为你的解析逻辑是“恐怖的”——当然你可以稍微清理一下代码,但从根本上说,它似乎还可以
  • 您是否考虑过将数据存储在数据库中。。。关系还是其他
  • 我将使用问题ID,而不是使用数组索引位置将答案与问题联系起来。这样,调查可以随着时间的推移而发展,您仍将拥有半可用的数据。至少,你会有一个部分完整的答案。如果您想要这种结构的最小持久性形式,一个想法是在每行文本中存储{record,question,answer}。读取数据将生成
    地图
    。您可以在此处找到有用的“自动映射”结构:
  • 公共抽象类自动映射 扩展树映射{ 受保护的抽象V createValue(); public V getOrCreate(K键){ V值=获取(键); 如果(值==null){ value=createValue(); put(键、值); } 返回值; } } 公共类映射 扩展自动映射{ 受保护的映射createValue(){ 返回新树映射(); } }
    谢谢我不使用数据库的唯一原因是因为我不知道如何使用数据库:“>@Anita:好吧,如果你想寻求一个快速、短期的答案,这是一个很好的理由。从长远来看,我建议你学习使用数据库!我不知道你的托管安排是什么, public abstract class AutoMap<K extends Comparable, V> extends TreeMap<K, V> { protected abstract V createValue(); public V getOrCreate(K key) { V value = get(key); if (value == null) { value = createValue(); put(key, value); } return value; } } public class MapOfMaps<J extends Comparable, K extends Comparable, V> extends AutoMap<J, Map<K, V>> { protected Map<K, V> createValue() { return new TreeMap<K, V>(); } }