Java 如何在不同的if-else语句中使用相同的数组

Java 如何在不同的if-else语句中使用相同的数组,java,arrays,if-statement,Java,Arrays,If Statement,我的代码有错误吗?因为每当我使用排序和查看按钮时,数组中显示的数字都是零,就像在“0”中一样,但是当我在if-else语句中放置/使用showMessageDialog时,我用来放置一些数字是正确的。。请帮帮我。。顺便说一句,很抱歉我的英语不好 import java.util.Scanner; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Prog extends JFrame i

我的代码有错误吗?因为每当我使用排序和查看按钮时,数组中显示的数字都是零,就像在“0”中一样,但是当我在if-else语句中放置/使用showMessageDialog时,我用来放置一些数字是正确的。。请帮帮我。。顺便说一句,很抱歉我的英语不好

import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Prog extends JFrame implements ActionListener{
    private JButton sort = new JButton("Sort");
    private JButton view = new JButton("View");
    private JButton enter = new JButton("Enter");
    private JButton exit = new JButton("Exit");
    private JLabel end = new JLabel("Assignment Passed by: Kevin Sagun");

    public Prog(){
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500,400);
        setResizable(true);
        setLocationRelativeTo(null);
        setTitle("Assignment po namin :)");
        setLayout(new FlowLayout()); 

        add(enter);
        add(sort);
        add(view);
        add(exit);
        add(end);

        sort.addActionListener(this);
        view.addActionListener(this);
        enter.addActionListener(this);
        exit.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e){
        Object source = e.getSource();

        int[] num=new int [5];
        int x, y, temp;
        String[] str = new String[5];

        if(source == enter){
            JOptionPane.showMessageDialog(null,"Enter Your Five Numbers: ");

            for(x=0;x < num.length;x++) {
                num[x]=JOptionPane.showInputDialog(null,"Number "+(x+1)+":");
                num[x]=Integer.parseInt(str[x]);
            }

            JOptionPane.showMessageDialog(null,num[0]+"IT "+num[1]+"IT "+num[2]+"IT "+num[3]+"IT "+num[4]+"IT ");

        }

        if(source == view){
            JOptionPane.showMessageDialog(null,num[0]+"IT "+num[1]+"IT       "+num[2]+"IT "+num[3]+"IT "+num[4]+"IT ");
        }

        if (source == sort) {
            for (y=0;y < num.length-1;y++) {    
                for (x=0;x < num.length-1;x++) {
                    if (num[x+1] < num[x]) {
                        temp=num[x];
                        num[x]=num[x+1];
                        num[x+1]=temp;}
                }
            }
        }

        if(source == exit){
            System.exit(0);
        }
     }

    public static void main(String[] args){
        Prog frame = new Prog();
    }   
}
import java.util.Scanner;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类Prog扩展JFrame实现ActionListener{
私有JButton排序=新JButton(“排序”);
私有JButton视图=新JButton(“视图”);
私有JButton enter=新JButton(“enter”);
私有JButton exit=新JButton(“exit”);
private JLabel end=新JLabel(“转让通过:Kevin Sagun”);
公共项目(){
setVisible(真);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(500400);
可设置大小(真);
setLocationRelativeTo(空);
setTitle(“转让po namin:)”;
setLayout(新的FlowLayout());
添加(输入);
添加(排序);
添加(视图);
添加(退出);
添加(结束);
sort.addActionListener(this);
view.addActionListener(this);
输入.addActionListener(this);
exit.addActionListener(this);
}
已执行的公共无效操作(操作事件e){
对象源=e.getSource();
int[]num=新的int[5];
整数x,y,温度;
字符串[]str=新字符串[5];
如果(源==输入){
showMessageDialog(null,“输入您的五个数字:”);
对于(x=0;x
每次单击“查看”按钮,都会再次触发整个事件,并重新创建其所有本地实例!这就是为什么数组保持零或空值。

source==view
时,数组中永远不会有元素,因为在显示之前不填充数组。只有在
source==enter
source==sort
时才填充数组,然后在下一个操作中重新初始化它。声明
int[]num=new int[5]时,必须在
if(source==view)
块中填充数组。

,您在方法内部执行此操作,这意味着它是一个局部变量。您似乎正确地分配了它“为您的行保存”:

num[x]=JOptionPane.showInputDialog(null,"Number "+(x+1)+":");
我猜你的意思是:

str[x]=JOptionPane.showInputDialog(null,"Number "+(x+1)+":");
为了保留更改,它需要成为类成员,这意味着您应该将其放在方法的外部(通常靠近顶部)。然后,您的班级将成为:

public class Prog extends JFrame implements ActionListener{
    private int[] num=new int [5];

    // ...

    public void actionPerformed(ActionEvent e){
        Object source = e.getSource();

        int x, y, temp;
        String[] str = new String[5];
        // int[] num=new int [5];

        // ...
     }

     // ...
}

试试看,你会发现更改被保留了

我没有编译您的代码,但我认为有一个错误:

if(source == enter){
        JOptionPane.showMessageDialog(null,"Enter Your Five Numbers: ");
        for(x=0;x<num.length;x++){
            num[x]=JOptionPane.showInputDialog(null,"Number "+(x+1)+":");
if(source==enter){
showMessageDialog(null,“输入您的五个数字:”);

对于(x=0;x)hanks!我不知道应该从外部分配int.非常感谢
if(source == enter){
        JOptionPane.showMessageDialog(null,"Enter Your Five Numbers: ");
        for(x=0;x<num.length;x++){
            str[x]=JOptionPane.showInputDialog(null,"Number "+(x+1)+":");