使用Java JOptionPane实现多用户调查问卷及响应结果统计的问题
问题原因
你当前的代码没有设置累计计数的变量,每次循环答题时,四个问题的答案变量都会被新的输入覆盖,所以最后输出的只是最后一位受访者的答案,无法统计所有用户的选择情况。
修复方案
- 在循环外部初始化统计数组:用1个4行3列的二维数组,分别对应4道题,每道题的3个下标对应选1、2、3的用户人数,初始值均为0。
- 每次收集到用户答案后,给对应数组的对应位置计数+1。
- 退出循环后,遍历统计数组输出每道题各选项的选择人数即可。
完整可运行代码
import javax.swing.JOptionPane; public class Survey { public static void main(String[] args) { // 初始化统计数组:4道题,每道题3个选项的计数,下标0对应选1的人数,1对应选2,2对应选3 int[][] count = new int[4][3]; int selection; do { // 第一题(社会主题) String q1 = JOptionPane.showInputDialog(null, "你目前的生活感受如何?" + "\n1. 很好" + "\n2. 一般" + "\n3. 不好"); int ans1 = Integer.parseInt(q1); count[0][ans1 - 1]++; // 第二题(社会主题) String q2 = JOptionPane.showInputDialog(null, "你的家庭收入状况如何?" + "\n1. 高于当地平均水平" + "\n2. 和平均水平持平" + "\n3. 低于平均水平"); int ans2 = Integer.parseInt(q2); count[1][ans2 - 1]++; // 第三题(社会主题) String q3 = JOptionPane.showInputDialog(null, "你的居住环境配套是否完善?" + "\n1. 完善" + "\n2. 一般" + "\n3. 不完善"); int ans3 = Integer.parseInt(q3); count[2][ans3 - 1]++; // 第四题(公共服务主题) String q4 = JOptionPane.showInputDialog(null, "你对当前社区公共服务的满意度如何?" + "\n1. 满意" + "\n2. 一般" + "\n3. 不满意"); int ans4 = Integer.parseInt(q4); count[3][ans4 - 1]++; selection = JOptionPane.showConfirmDialog(null, "是否要新增一份问卷回答?"); } while (selection == JOptionPane.YES_OPTION); if(selection == JOptionPane.NO_OPTION){ // 拼接输出结果 String result = "调查统计结果如下:\n"; result += "第一题:选1共" + count[0][0] + "人,选2共" + count[0][1] + "人,选3共" + count[0][2] + "人\n"; result += "第二题:选1共" + count[1][0] + "人,选2共" + count[1][1] + "人,选3共" + count[1][2] + "人\n"; result += "第三题:选1共" + count[2][0] + "人,选2共" + count[2][1] + "人,选3共" + count[2][2] + "人\n"; result += "第四题:选1共" + count[3][0] + "人,选2共" + count[3][1] + "人,选3共" + count[3][2] + "人\n"; JOptionPane.showMessageDialog(null, result); } } }
可选优化
可以增加输入合法性校验,避免用户输入非1/2/3的内容导致程序报错,也可以处理用户点击输入框取消按钮的空指针异常情况。
内容的提问来源于stack exchange,提问作者Hamza Mohammad Khan
相关产品推荐
相关产品推荐

