2013-04-18 43 views
0

这是我的课程的一个小程序。 为什么我最后的g.drawString打印0的所有变量都有它?Applet不会携带变量从init方法到paint方法

import javax.swing.*; 
import java.awt.*; 

public class Days extends JApplet 
{ 
private int month; 

private int day; 

private int year_string, 

private int total_days; 

private int month_days; 

public final int minMonth = 1; 

public final int maxMonth = 12; 

public final int minDay = 1; 

public final int maxDay = 31; 

public final int minYear = 1000; 

public final int maxYear = 2999; 

public void init() 
    { 
    String month_string, 
      day_string, 
      year_string; 

    month_string = JOptionPane.showInputDialog("Enter the month (" + minMonth + 
               "-" + maxMonth + ")"); 
    day_string = JOptionPane.showInputDialog("Enter the day (" + minDay + 
               "-" + maxDay + ")"); 
    year_string = JOptionPane.showInputDialog("Enter the year (" + minYear + 
               "-" + maxYear + ")"); 
    int month = Integer.parseInt(month_string); 
    int day = Integer.parseInt(day_string); 
    int year = Integer.parseInt(year_string); 



    switch (month){ 
     case 1: 
       month_days = 0; 
       break; 
     case 2: 
       month_days = 31; 
       break; 
     case 3: 
       month_days = 59; 
       break; 
     case 4: ; 
       month_days = 90; 
       break; 
     case 5: 
       month_days = 120; 
       break; 
     case 6: 
       month_days = 151; 
       break; 
     case 7: 
       month_days = 181; 
       break; 
     case 8: 
       month_days = 212; 
       break; 
     case 9: 
       month_days = 243; 
       break; 
     case 10: 
       month_days = 273; 
       break; 
     case 11: 
       month_days = 304; 
        break; 
     case 12: 
       month_days = 334; 
        break;   

     } 

    int total_days = month_days + day; 
    } 

    public void paint(Graphics g) 
    { 


    g.drawString("The number of days from the beginning of " + year_string + " to " + month + "/" + day + "/" + year_string + 
        "= " + total_days, 40, 30); 

    showStatus("Alex Collins"); 
    } 

} 
+0

我该如何解决这个问题我有请帮忙 – user2297094

+0

你需要通过一个基本的Java教程,谷歌一个。请参阅我们的FAQ。这在init方法和类中都有相同的变量。因此,mehtod中的var隐藏了类,所以除非使用“this”,否则它不会改变它。在你的情况下,只需删除init中的var变量。 – tgkprog

回答

1

张贴的来源在这里不能编译。当编译错误得到解决时,问题似乎是变量被声明为类属性,以及局部方法。本地声明的属性是'遮蔽'我们需要的另一个属性,但是在声明它的方法结束时会消失(超出范围)。

注意的是:

  1. 小应用程序比(基于帧的)应用程序难以开发和调试。
  2. 应用程序比命令行应用程序更难编码。
  3. 变量作用域是Java 101,应该在命令行应用程序中进行排序。

这是applet的工作版本。

import javax.swing.*; 
import java.awt.*; 

public class Days extends JApplet 
{ 
private int month; 
private int day; 
private String year_string; 
private String month_string; 
private String day_string; 
private int total_days; 
private int month_days; 
public final int minMonth = 1; 
public final int maxMonth = 12; 
public final int minDay = 1; 
public final int maxDay = 31; 
public final int minYear = 1000; 
public final int maxYear = 2999; 

public void init() 
    { 
    month_string = JOptionPane.showInputDialog("Enter the month (" + minMonth + 
               "-" + maxMonth + ")"); 
    day_string = JOptionPane.showInputDialog("Enter the day (" + minDay + 
               "-" + maxDay + ")"); 
    year_string = JOptionPane.showInputDialog("Enter the year (" + minYear + 
               "-" + maxYear + ")"); 
    int month = Integer.parseInt(month_string); 
    int day = Integer.parseInt(day_string); 
    int year = Integer.parseInt(year_string); 



    switch (month){ 
     case 1: 
       month_days = 0; 
       break; 
     case 2: 
       month_days = 31; 
       break; 
     case 3: 
       month_days = 59; 
       break; 
     case 4: ; 
       month_days = 90; 
       break; 
     case 5: 
       month_days = 120; 
       break; 
     case 6: 
       month_days = 151; 
       break; 
     case 7: 
       month_days = 181; 
       break; 
     case 8: 
       month_days = 212; 
       break; 
     case 9: 
       month_days = 243; 
       break; 
     case 10: 
       month_days = 273; 
       break; 
     case 11: 
       month_days = 304; 
        break; 
     case 12: 
       month_days = 334; 
        break; 

     } 
    total_days = month_days + day; 
    } 

    public void paint(Graphics g) 
    { 
    g.drawString("The number of days from the beginning of " + year_string + " to " + month + "/" + day + "/" + year_string + 
        "= " + total_days, 10, 30); 
    showStatus("Alex Collins"); 
    } 
}