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]。我必须单击组合框中的一个