Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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_User Interface - Fatal编程技术网

Java 用数组进行转换计算

Java 用数组进行转换计算,java,arrays,user-interface,Java,Arrays,User Interface,我正在为不同城市之间的距离创建一个换算计算器。但是我在如何从转换方法调用计算方面遇到了问题。例如: private class ComboBoxListener implements ActionListener { public void actionPerformed(ActionEvent e) { int selectedRow = destinationBox.getSelectedIndex(); int selectedCol = o

我正在为不同城市之间的距离创建一个换算计算器。但是我在如何从转换方法调用计算方面遇到了问题。例如:

private class ComboBoxListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        int selectedRow = destinationBox.getSelectedIndex();
        int selectedCol = originBox.getSelectedIndex();
        distanceText.setText(fileData[selectedRow + 1][selectedCol + 1]);
    }
}

private class RadioButtonListener implements ActionListener
{

    public void actionPerformed (ActionEvent event)
    {
        if (event.getSource() == kilometersRadioButton)
        {
            distanceLabel.setText("Distance (kilometers):");
            avgspeedLabel.setText("Avg. Speeg (kph): ");  
        }
        else if (event.getSource() == milesRadioButton)
        {
            distanceLabel.setText("Distance (miles): ");
            avgspeedLabel.setText("Avg. Speeg (mph): ");
        }
    }
}
这一部分是2D数组选择值的地方,我的目的是在单击单选按钮时进行从英里到公里的计算。默认情况下,我从中绘制的文件以英里为单位

public class MetricConverter
{

    public static double milesToKilometers(double miles) //This static method holds the miles to kilometers conversion equation
    {
        return miles * 1.609;
    }

    public static double kilometersToMiles(double kilometers) //This static method holds the kilometers to miles conversion equation
    {
        return kilometers / 1.609;
    }
}
这是转换方法。当数组的值位于TextField/String中时,如何调用它们


谢谢,

因为您的方法是静态的,所以可以通过
Classname.methodName()直接调用

如果要以字符串形式存储,可以执行以下操作:

String str = String.valueOf(MetricConverter.kilometersToMiles( kilometers));

由于您的方法是静态的,所以可以通过
Classname.methodName()直接调用

如果要以字符串形式存储,可以执行以下操作:

String str = String.valueOf(MetricConverter.kilometersToMiles( kilometers));
只是:

或英里数:

distanceText.setText(String.valueOf(MetricConverter.kilometersToMiles(fileData[selectedRow + 1][selectedCol + 1])));
当然,这只有在fileData包含双值时才有效。

只要:

或英里数:

distanceText.setText(String.valueOf(MetricConverter.kilometersToMiles(fileData[selectedRow + 1][selectedCol + 1])));

当然,这只有在fileData包含双值时才起作用。

想象一下,您知道如何调用转换方法。考虑这种情况:

  • 选择两个城市。距离以英里为单位显示
  • 您可以选择公里。距离以公里为单位
  • 你改变了其中一个城市即使选择了单选按钮“公里”,距离仍以英里为单位显示。
  • 问题是您在
    distance text
    中写入的文本取决于两种不同的输入操作:设置城市和设置显示类型。因此,设置文本时需要所有这些信息

    假设您的事件处理程序被声明为内部类,我将为该数据提供一些字段、相应的setter和一个“updatetext”方法:

    最后,更新事件处理程序:

    private class ComboBoxListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            setCities(destinationBox.getSelectedIndex(), 
                      originBox.getSelectedIndex());
            updateDistanceText();
        }
    }
    
    private class RadioButtonListener implements ActionListener {
        public void actionPerformed (ActionEvent event) {
            if (event.getSource() == kilometersRadioButton) {
                distanceLabel.setText("Distance (kilometers):");
                avgspeedLabel.setText("Avg. Speed (kph): ");
                setKm(true);
            } else if (event.getSource() == milesRadioButton) {
                distanceLabel.setText("Distance (miles): ");
                avgspeedLabel.setText("Avg. Speed (mph): ");
                setKm(false);
            }
            updateDistanceText();
        }
    }
    
    编辑如果您不想使用尚未学习的技术,可以使用一些复制粘贴。。。一般来说,在多个地方使用相同的代码是不好的做法,因为更改代码是一件痛苦的事情,但出于说明目的,我还是要这样做:

    private class ComboBoxListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int selectedRow = destinationBox.getSelectedIndex();
            int selectedCol = originBox.getSelectedIndex();
    
            String text = fileData[selectedRow+1][selectedColumn+1];
    
            if (kilometersRadioButton.isSelected()) {
                text = String.valueOf(
                         MetricConverter.milesToKilometers(Double.valueOf(text)));
            }
    
            distanceText.setText(text);        
        }
    }
    
    private class RadioButtonListener implements ActionListener {
        public void actionPerformed (ActionEvent event) {
            int selectedRow = destinationBox.getSelectedIndex();
            int selectedCol = originBox.getSelectedIndex();
    
            String text = fileData[selectedRow+1][selectedColumn+1];
    
            if (event.getSource() == kilometersRadioButton) {
                distanceLabel.setText("Distance (kilometers):");
                avgspeedLabel.setText("Avg. Speeg (kph): ");  
    
                text = String.valueOf(
                         MetricConverter.milesToKilometers(Double.valueOf(text)));
            } else if (event.getSource() == milesRadioButton) {
                distanceLabel.setText("Distance (miles): ");
                avgspeedLabel.setText("Avg. Speeg (mph): ");
            }
    
            distanceText.setText(text);
        }
    }
    

    假设您知道如何调用转换方法。考虑这种情况:

  • 选择两个城市。距离以英里为单位显示
  • 您可以选择公里。距离以公里为单位
  • 你改变了其中一个城市即使选择了单选按钮“公里”,距离仍以英里为单位显示。
  • 问题是您在
    distance text
    中写入的文本取决于两种不同的输入操作:设置城市和设置显示类型。因此,设置文本时需要所有这些信息

    假设您的事件处理程序被声明为内部类,我将为该数据提供一些字段、相应的setter和一个“updatetext”方法:

    最后,更新事件处理程序:

    private class ComboBoxListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            setCities(destinationBox.getSelectedIndex(), 
                      originBox.getSelectedIndex());
            updateDistanceText();
        }
    }
    
    private class RadioButtonListener implements ActionListener {
        public void actionPerformed (ActionEvent event) {
            if (event.getSource() == kilometersRadioButton) {
                distanceLabel.setText("Distance (kilometers):");
                avgspeedLabel.setText("Avg. Speed (kph): ");
                setKm(true);
            } else if (event.getSource() == milesRadioButton) {
                distanceLabel.setText("Distance (miles): ");
                avgspeedLabel.setText("Avg. Speed (mph): ");
                setKm(false);
            }
            updateDistanceText();
        }
    }
    
    编辑如果您不想使用尚未学习的技术,可以使用一些复制粘贴。。。一般来说,在多个地方使用相同的代码是不好的做法,因为更改代码是一件痛苦的事情,但出于说明目的,我还是要这样做:

    private class ComboBoxListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int selectedRow = destinationBox.getSelectedIndex();
            int selectedCol = originBox.getSelectedIndex();
    
            String text = fileData[selectedRow+1][selectedColumn+1];
    
            if (kilometersRadioButton.isSelected()) {
                text = String.valueOf(
                         MetricConverter.milesToKilometers(Double.valueOf(text)));
            }
    
            distanceText.setText(text);        
        }
    }
    
    private class RadioButtonListener implements ActionListener {
        public void actionPerformed (ActionEvent event) {
            int selectedRow = destinationBox.getSelectedIndex();
            int selectedCol = originBox.getSelectedIndex();
    
            String text = fileData[selectedRow+1][selectedColumn+1];
    
            if (event.getSource() == kilometersRadioButton) {
                distanceLabel.setText("Distance (kilometers):");
                avgspeedLabel.setText("Avg. Speeg (kph): ");  
    
                text = String.valueOf(
                         MetricConverter.milesToKilometers(Double.valueOf(text)));
            } else if (event.getSource() == milesRadioButton) {
                distanceLabel.setText("Distance (miles): ");
                avgspeedLabel.setText("Avg. Speeg (mph): ");
            }
    
            distanceText.setText(text);
        }
    }
    

    文件数据来自.txt文件。那我该怎么办?把字符串转换成一个double,我好像不明白。组合框中选择的选项是城市名称。因此,如果我将数组本身转换为double,就会产生问题。我只需要将.txt文件中的距离数字创建为Comboboxes中两个位置选择的双精度值。FileData来自.txt文件。那我该怎么办?把字符串转换成一个double,我好像不明白。组合框中选择的选项是城市名称。因此,如果我将数组本身转换为double,就会产生问题。我只需要在.txt文件中从ComboBox中选择的两个位置将距离数字创建为一个双精度,因此它应该是distanceText.valueOf(MetricConverter.kimmerstomiles(km))?所以它应该是distanceText.valueOf(MetricConverter.km到英里(km))?我明白这一点,但我还没有真正学会用这种方式。我想在课程中所掌握的知识范围内行事。有没有办法利用我所拥有的?@RandyB。不是真的。如前所述,为了更新textfield.distance text.setText(fileData[selectedRow+1][selectedCol+1]),您需要知道组合框和单选按钮的状态;没有选择我们要查找的信息吗?@RandyB。如果选择了“公里数”单选按钮,则不会。您可能需要从我的函数中复制代码
    updatedInstanceText
    ,将
    替换为
    selectedRow
    替换为
    selectedColumn
    ,并将
    inKm
    替换为
    公里数RadioButton.isSelected()
    好的,这样做了,但现在程序没有默认的distanceText.setText(文件数据[selectedRow+1][selectedCol+1]启动时。我必须单击其中一个组合框选项,它才能启动。它为什么会这样做?我理解这一点,但我还没有用这种方式实际学习。我想在我们在课程中所掌握的知识范围内行动。有没有办法使用我所拥有的?@RandyB。不是真的。正如我所描述的,你需要知道组合框的状态和单击单选按钮以更新textfield.distanceText.setText(文件数据[selectedRow+1][selectedCol+1]);不选择我们要查找的信息?@RandyB。如果选择了“公里数”单选按钮,则不会选择。您可能希望从我的函数中复制代码
    updateInstanceText
    ,将
    替换为
    selectedRow
    替换为
    selectedColumn
    ,并将
    inKm
    替换为
    公里数单选按钮.isSelected()
    好的,这样可以,但是现在程序在启动时没有默认的distance text.setText(文件数据[selectedRow+1][selectedCol+1]。我必须单击组合框中的一个