数组存储接口JAVA 大概容易解决
Array storage interface JAVA Probably easy to solve
我有一个问题。我正在使用 java 小程序设计一个界面,我想制作一个 注册按钮 ,它采用 用户名、密码、性别和年龄 并将它们存储在一个数组中;从数组到 .txt
文件。当用户尝试使用登录按钮登录时,该文件稍后将用于验证用户。
阵列似乎有问题,但我不知道哪里出了问题。我也很不擅长编程,所以也许对其他人来说这看起来很愚蠢。不幸的是,我的声誉只有 1,所以我无法 post 界面图片,但我想您可以借助代码看到它。
我的代码太大,无法在此处 post 编辑,所以我将 link 附加到我的 Netbeans 文件夹:
CODE zip file
public class Interface extends javax.swing.JApplet {
private int year=2015;
private int year2=2015;
private int month=1;
private int month2=4;
private int day=1;
private int day2=28;
private int n;
private int age=0;
private String gender= "M";
private String[][] logData = new String[4][n];
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
int v = jSlider1.getValue();
String vv = Integer.toString(v);
jTextField2.setText(vv);
}
private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {
int v1 = jSlider2.getValue();
String vv1 = Integer.toString(v1);
jTextField4.setText(vv1);
}
private void jToggleButton2StateChanged(javax.swing.event.ChangeEvent evt) {
boolean slct = jToggleButton2.isSelected();
if (!slct)
jTextField5.setText("ON");
else
jTextField5.setText("OFF");
}
private void jSlider3StateChanged(javax.swing.event.ChangeEvent evt) {
int v2 = jSlider3.getValue();
String vv2 = Integer.toString(v2);
jTextField7.setText(vv2);
}
private void jSlider4StateChanged(javax.swing.event.ChangeEvent evt) {
int v3 = jSlider4.getValue();
String vv3 = Integer.toString(v3);
jTextField9.setText(vv3);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, "The system will shut down");
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, "The system will restart");
}
private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox1.getSelectedIndex();
year=2015-k;
jTextField3.setText(Integer.toString(year));
}
private void jComboBox2ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox2.getSelectedIndex();
month = k+1;
jTextField8.setText(Integer.toString(month));
}
private void jComboBox3ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox3.getSelectedIndex();
day = k+1;
switch (month){
case 2:
if (year%4==0){
if (day>29)
day=29;
}
if (year%4!=0){
if (day>28)
day=28;
}
case 4:
if (day>30)
day=30;
break;
case 6:
if (day>30)
day=30;
break;
case 9:
if (day>30)
day=30;
break;
case 11:
if (day>30)
day=30;
break;
default:
break;
}
jTextField10.setText(Integer.toString(day));
}
private void jTextField3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jComboBox5ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox5.getSelectedIndex();
year2=2015-k;
jTextField11.setText(Integer.toString(year2));
}
private void jComboBox6ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox6.getSelectedIndex();
month2 = k+1;
jTextField12.setText(Integer.toString(month2));
}
private void jComboBox7ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox7.getSelectedIndex();
day2 = k+1;
switch (month2){
case 2:
if (year2%4==0){
if (day2>29)
day2=29;
}
if (year2%4!=0){
if (day2>28)
day2=28;
}
case 4:
if (day2>30)
day2=30;
break;
case 6:
if (day2>30)
day2=30;
break;
case 9:
if (day2>30)
day2=30;
break;
case 11:
if (day2>30)
day2=30;
break;
default:
break;
}
jTextField13.setText(Integer.toString(day2));
}
private void jTextField11ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jComboBox5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton4MouseReleased(java.awt.event.MouseEvent evt) {
n++;
if(month2<month)
age=year2-year-1;
if((month2==month)&&(day2<day))
age=year2-year-1;
if ((month2==month)&&(day2>=day))
age=year2-year;
if (month2>month)
age=year2-year;
String ageStr=Integer.toString(age);
if(jComboBox4.getSelectedIndex()==1)
gender="F";
else
gender="M";
if ((jTextField6.getText().equalsIgnoreCase(""))&&(jPasswordField2.getText().equalsIgnoreCase("")))
for (int i=0;i<n;i++){
logData[0][i]=jTextField6.getText();
logData[1][i]=jPasswordField2.getText();
logData[2][i]=ageStr;
logData[3][i]=gender;
}
JOptionPane.showMessageDialog(null, "Registration successful");
//System.out.println(logData[0][0]);
File log = new File("out.txt");
try{
if(log.exists()==false){
log.createNewFile();
}
PrintWriter out = new PrintWriter(new FileWriter(log, true));
//out.println(logData[0][0]);
out.close();
}catch(IOException e){
System.out.println("COULD NOT LOG!!");
}
}
所以每次我尝试打印数组 logData 的值时,我都会收到以下错误:
线程异常 "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 0
在 Interface.jButton4MouseReleased(Interface.java:1002)
在 Interface.access700 美元(Interface.java:23)
在界面$8.mouseReleased(Interface.java:264)
在 java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
在 java.awt.Component.processMouseEvent(Component.java:6525)
在 javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
在 java.awt.Component.processEvent(Component.java:6290)
在 java.awt.Container.processEvent(Container.java:2234)
在 java.awt.Component.dispatchEventImpl(Component.java:4881)
在 java.awt.Container.dispatchEventImpl(Container.java:2292)
在 java.awt.Component.dispatchEvent(Component.java:4703)
在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
在 java.awt.Container.dispatchEventImpl(Container.java:2278)
在 java.awt.Component.dispatchEvent(Component.java:4703)
在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
在 java.awt.EventQueue.access400 美元(EventQueue.java:97)
在 java.awt.EventQueue$3.run(EventQueue.java:697)
在 java.awt.EventQueue$3.run(EventQueue.java:691)
在 java.security.AccessController.doPrivileged(本机方法)
在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
在 java.awt.EventQueue$4.run(EventQueue.java:719)
在 java.awt.EventQueue$4.run(EventQueue.java:717)
在 java.security.AccessController.doPrivileged(本机方法)
在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
在 java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
既然你似乎总是在处理相同数量的项目,为什么不使用 Map 而不是多维字符串数组呢?
Map vehicles = new HashMap();
vehicles.put("BMW", 5);
vehicles.put("Mercedes", 3);
vehicles.put("Audi", 4);
vehicles.put("Ford", 10);
http://examples.javacodegeeks.com/java-basics/java-map-example/
或适合你:
Map logData = new HashMap();
logData.put("jTextField6", jTextField6.getText());
logData.put("jPasswordField2", jPasswordField2.getText());
logData.put("age", ageStr);
logData.put("gender", gender);
然后你就可以摆脱 jButton4MouseReleased
中那个笨拙的 for 循环了。如果您必须跟踪 jButton4MouseReleased
的调用,您可以使用这样的尝试数组:
List attempts = new ArrayList();
Map logData = new HashMap();
logData.put("jTextField6", jTextField6.getText());
logData.put("jPasswordField2", jPasswordField2.getText());
logData.put("age", ageStr);
logData.put("gender", gender);
attempts.add(logData);
我有一个问题。我正在使用 java 小程序设计一个界面,我想制作一个 注册按钮 ,它采用 用户名、密码、性别和年龄 并将它们存储在一个数组中;从数组到 .txt
文件。当用户尝试使用登录按钮登录时,该文件稍后将用于验证用户。
阵列似乎有问题,但我不知道哪里出了问题。我也很不擅长编程,所以也许对其他人来说这看起来很愚蠢。不幸的是,我的声誉只有 1,所以我无法 post 界面图片,但我想您可以借助代码看到它。
我的代码太大,无法在此处 post 编辑,所以我将 link 附加到我的 Netbeans 文件夹: CODE zip file
public class Interface extends javax.swing.JApplet {
private int year=2015;
private int year2=2015;
private int month=1;
private int month2=4;
private int day=1;
private int day2=28;
private int n;
private int age=0;
private String gender= "M";
private String[][] logData = new String[4][n];
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
int v = jSlider1.getValue();
String vv = Integer.toString(v);
jTextField2.setText(vv);
}
private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {
int v1 = jSlider2.getValue();
String vv1 = Integer.toString(v1);
jTextField4.setText(vv1);
}
private void jToggleButton2StateChanged(javax.swing.event.ChangeEvent evt) {
boolean slct = jToggleButton2.isSelected();
if (!slct)
jTextField5.setText("ON");
else
jTextField5.setText("OFF");
}
private void jSlider3StateChanged(javax.swing.event.ChangeEvent evt) {
int v2 = jSlider3.getValue();
String vv2 = Integer.toString(v2);
jTextField7.setText(vv2);
}
private void jSlider4StateChanged(javax.swing.event.ChangeEvent evt) {
int v3 = jSlider4.getValue();
String vv3 = Integer.toString(v3);
jTextField9.setText(vv3);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, "The system will shut down");
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, "The system will restart");
}
private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox1.getSelectedIndex();
year=2015-k;
jTextField3.setText(Integer.toString(year));
}
private void jComboBox2ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox2.getSelectedIndex();
month = k+1;
jTextField8.setText(Integer.toString(month));
}
private void jComboBox3ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox3.getSelectedIndex();
day = k+1;
switch (month){
case 2:
if (year%4==0){
if (day>29)
day=29;
}
if (year%4!=0){
if (day>28)
day=28;
}
case 4:
if (day>30)
day=30;
break;
case 6:
if (day>30)
day=30;
break;
case 9:
if (day>30)
day=30;
break;
case 11:
if (day>30)
day=30;
break;
default:
break;
}
jTextField10.setText(Integer.toString(day));
}
private void jTextField3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jComboBox5ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox5.getSelectedIndex();
year2=2015-k;
jTextField11.setText(Integer.toString(year2));
}
private void jComboBox6ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox6.getSelectedIndex();
month2 = k+1;
jTextField12.setText(Integer.toString(month2));
}
private void jComboBox7ItemStateChanged(java.awt.event.ItemEvent evt) {
int k = jComboBox7.getSelectedIndex();
day2 = k+1;
switch (month2){
case 2:
if (year2%4==0){
if (day2>29)
day2=29;
}
if (year2%4!=0){
if (day2>28)
day2=28;
}
case 4:
if (day2>30)
day2=30;
break;
case 6:
if (day2>30)
day2=30;
break;
case 9:
if (day2>30)
day2=30;
break;
case 11:
if (day2>30)
day2=30;
break;
default:
break;
}
jTextField13.setText(Integer.toString(day2));
}
private void jTextField11ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jComboBox5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton4MouseReleased(java.awt.event.MouseEvent evt) {
n++;
if(month2<month)
age=year2-year-1;
if((month2==month)&&(day2<day))
age=year2-year-1;
if ((month2==month)&&(day2>=day))
age=year2-year;
if (month2>month)
age=year2-year;
String ageStr=Integer.toString(age);
if(jComboBox4.getSelectedIndex()==1)
gender="F";
else
gender="M";
if ((jTextField6.getText().equalsIgnoreCase(""))&&(jPasswordField2.getText().equalsIgnoreCase("")))
for (int i=0;i<n;i++){
logData[0][i]=jTextField6.getText();
logData[1][i]=jPasswordField2.getText();
logData[2][i]=ageStr;
logData[3][i]=gender;
}
JOptionPane.showMessageDialog(null, "Registration successful");
//System.out.println(logData[0][0]);
File log = new File("out.txt");
try{
if(log.exists()==false){
log.createNewFile();
}
PrintWriter out = new PrintWriter(new FileWriter(log, true));
//out.println(logData[0][0]);
out.close();
}catch(IOException e){
System.out.println("COULD NOT LOG!!");
}
}
所以每次我尝试打印数组 logData 的值时,我都会收到以下错误:
线程异常 "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 0 在 Interface.jButton4MouseReleased(Interface.java:1002) 在 Interface.access700 美元(Interface.java:23) 在界面$8.mouseReleased(Interface.java:264) 在 java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290) 在 java.awt.Component.processMouseEvent(Component.java:6525) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 在 java.awt.Component.processEvent(Component.java:6290) 在 java.awt.Container.processEvent(Container.java:2234) 在 java.awt.Component.dispatchEventImpl(Component.java:4881) 在 java.awt.Container.dispatchEventImpl(Container.java:2292) 在 java.awt.Component.dispatchEvent(Component.java:4703) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 在 java.awt.Container.dispatchEventImpl(Container.java:2278) 在 java.awt.Component.dispatchEvent(Component.java:4703) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746) 在 java.awt.EventQueue.access400 美元(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:697) 在 java.awt.EventQueue$3.run(EventQueue.java:691) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 在 java.awt.EventQueue$4.run(EventQueue.java:719) 在 java.awt.EventQueue$4.run(EventQueue.java:717) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:716) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
既然你似乎总是在处理相同数量的项目,为什么不使用 Map 而不是多维字符串数组呢?
Map vehicles = new HashMap();
vehicles.put("BMW", 5);
vehicles.put("Mercedes", 3);
vehicles.put("Audi", 4);
vehicles.put("Ford", 10);
http://examples.javacodegeeks.com/java-basics/java-map-example/
或适合你:
Map logData = new HashMap();
logData.put("jTextField6", jTextField6.getText());
logData.put("jPasswordField2", jPasswordField2.getText());
logData.put("age", ageStr);
logData.put("gender", gender);
然后你就可以摆脱 jButton4MouseReleased
中那个笨拙的 for 循环了。如果您必须跟踪 jButton4MouseReleased
的调用,您可以使用这样的尝试数组:
List attempts = new ArrayList();
Map logData = new HashMap();
logData.put("jTextField6", jTextField6.getText());
logData.put("jPasswordField2", jPasswordField2.getText());
logData.put("age", ageStr);
logData.put("gender", gender);
attempts.add(logData);