這是我在 JFrame 類中的內容
private void btnLLamada1ActionPerformed(java.awt.event.ActionEvent evt) {
empresa = new Empresa();
minutos = Integer.parseInt(JOptionPane.showInputDialog(null, "numero de minutos"));
Object[] Lista = {"Local", "Internacional", "Celular"};
String s = (String) JOptionPane.showInputDialog(
null, "Seleccione tipo de llamada", "Linea 1", JOptionPane.PLAIN_MESSAGE, null, Lista, "Local");
System.out.println(s);
switch (s) {
case "Local":
empresa.agregarLlamadaLocalLinea1(minutos);
break;
case "Internacional":
empresa.agregarLlamadaInternacionalLinea1(minutos);
break;
case "Celular":
empresa.agregarLlamadaCelularLinea1(minutos);
break;
}
}
這是我在其他類“Empresa”中嘗試添加int的內容
void agregarLlamadaLocalLinea1(int minutos) {
minT = minutos minT;
System.out.println(minT); // doesn't add the int
}
所以當我運行程式時,它會在控制臺中顯示“minutos”的值,但它不會用“minT”添加它
minutos的值是用戶在一個JOptionPane中賦值的,而minT的值初始為0,所以“minT”的思想就是每次都會加上“minutos”值的總和使用 JOptionPane 輸入值
uj5u.com熱心網友回復:
關于,
“我只呼叫一次 new Empresa()”
不,只要呼叫new Empresa()
ActionListener代碼,您就會呼叫,因此每次嘗試將 minutos 添加到 minT 欄位時,您都是在新實體上執行此操作,而之前創建的舊實體保持不變。
同樣,您應該只創建一次 Empresa 實體,可能在建構式中,而不是在偵聽器中。如果您想要更詳細的答案,請再次創建并發布有效的mre。
例如,在下面的代碼中,它派生自您的代碼,我通過始終嘗試添加10
到 Empresa int 屬性來簡化代碼。我在監聽器呼叫的 Empresa 方法中列印出 Empresa 實體的 hashCode:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TestEmpresa extends JPanel {
private Empresa empresa;
public TestEmpresa() {
setPreferredSize(new Dimension(400, 300));
JButton btnLLamada1 = new JButton("Llamada 1");
btnLLamada1.addActionListener(e -> btnLLamada1ActionPerformed(e));
add(btnLLamada1);
}
private void btnLLamada1ActionPerformed(java.awt.event.ActionEvent evt) {
empresa = new Empresa();
empresa.agregarLlamadaLocalLinea1(10);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
TestEmpresa mainPanel = new TestEmpresa();
JFrame frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
class Empresa {
private int minT = 0;
void agregarLlamadaLocalLinea1(int minutos) {
minT = minutos minT;
System.out.println(minT);
System.out.println("Current Empresa instance's hashCode: " this.hashCode());
}
}
您可以通過命令列上顯示的輸出看到列印輸出的 minT 值仍然存在10
,并且每次呼叫操作偵聽器時顯示的 hashCode 都不同,這意味著 Empresa 實體每次都不同:
10
Current Empresa instance's hashCode: 912404094
10
Current Empresa instance's hashCode: 1076883823
10
Current Empresa instance's hashCode: 36667117
10
Current Empresa instance's hashCode: 757584339
相反,創建一個 Empresa 實體并更新它:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class TestEmpresa extends JPanel {
private Empresa empresa = new Empresa(); // !! DO THIS ****
public TestEmpresa() {
setPreferredSize(new Dimension(400, 300));
JButton btnLLamada1 = new JButton("Llamada 1");
btnLLamada1.addActionListener(e -> btnLLamada1ActionPerformed(e));
add(btnLLamada1);
}
private void btnLLamada1ActionPerformed(java.awt.event.ActionEvent evt) {
// empresa = new Empresa(); // !! NO don't do this ****
empresa.agregarLlamadaLocalLinea1(10);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
TestEmpresa mainPanel = new TestEmpresa();
JFrame frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
輸出顯示每次增加的值minT
和相同的hashCode,這意味著我們每次都在更新相同的 Empresa 實體:
10
Current Empresa instance's hashCode: 619496914
20
Current Empresa instance's hashCode: 619496914
30
Current Empresa instance's hashCode: 619496914
40
Current Empresa instance's hashCode: 619496914
50
Current Empresa instance's hashCode: 619496914
- 還要注意在這個答案中使用最少的示例代碼來幫助簡化代碼和問題。將來,請考慮創建并發布您的問題。
uj5u.com熱心網友回復:
特別是什么不起作用?以下代碼將分鐘列印兩次。唯一的問題是,離開該方法后,Empresa 的實體不再可訪問。
import javax.swing.*;
public class Main {
public static void main(String[] args) {
Empresa empresa = new Empresa();
int minutos = Integer.parseInt(JOptionPane.showInputDialog(null, "numero de minutos"));
Object[] Lista = {"Local", "Internacional", "Celular"};
String s = (String) JOptionPane.showInputDialog(
null, "Seleccione tipo de llamada", "Linea 1", JOptionPane.PLAIN_MESSAGE, null, Lista, "Local");
System.out.println(s);
switch (s) {
case "Local":
empresa.agregarLlamadaLocalLinea1(minutos);
break;
case "Internacional":
// empresa.agregarLlamadaInternacionalLinea1(minutos);
break;
case "Celular":
// empresa.agregarLlamadaCelularLinea1(minutos);
break;
}
System.out.println(empresa.minT);
}
}
class Empresa {
public int minT = 0;
void agregarLlamadaLocalLinea1(int minutos) {
minT = minutos minT;
System.out.println(minT); // doesn't add the int
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470515.html
標籤:爪哇
上一篇:布爾變數始終等于false