【问题标题】:Trying to use get/set methods [closed]尝试使用 get/set 方法 [关闭]
【发布时间】:2015-07-13 03:18:26
【问题描述】:

看看 Circle 类。每次 if 语句评估为 true 时,我都希望计数器加一。我正在尝试使用 set 方法来为我完成这项工作,但是当我在 main 方法中检查 counter 的值时,它并没有计数。有小费吗?

package circle;

import java.awt.Color;
import java.awt.Graphics; 
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JApplet;


public class Shapes extends JApplet {

private int squareLength = 0;
private int count = 0;
private double areaSquares = 0;
private double areaCircle = 0;

public void setPixelDimOfSquare(int width) {squareLength = width;}

public void setCount(int n) {count = n++;}

public int getCount() {return count;}

@Override
public void paint(Graphics g) {

    Graphics2D g2 = (Graphics2D) g;

    //shapes
    //adds sphere (xcoord,ycoord,width of framing rect, height of framing rect)
    g2.draw(new Ellipse2D.Double(0, 0, 1000, 1000));

    //builds square grid and counts number of whole squares in the circle.
    for (int i = 0; squareLength*i <= 1000; i++){
        for (int j = 0; squareLength*j <= 1000; j++) {

         if(new Ellipse2D.Double(0,0,1000,1000).contains(new Rectangle2D.Double(squareLength*i,squareLength*j,squareLength,squareLength))){
             setCount(1);
             g2.setColor(Color.black);
             g2.fillRect(squareLength*i,squareLength*j,squareLength,squareLength);
         } else {
             g2.drawRect(squareLength*i,squareLength*j,squareLength,squareLength);
         }
        }
    } 
    System.out.println("Shape: There are " + getCount() + " squares in the circle.");
} 

public double areaSquares() {
    areaSquares = Math.pow(squareLength,2) * count;
    return areaSquares;
}

public double areaCircle() {

    areaCircle = Math.PI * Math.pow(1000, 2);
    return areaCircle;


}
}

现在是主要的

package circle;

import java.util.Scanner;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Main {

public static void main(String[] args) {

    //Gets the desired number of boxes
    //Scanner sc = new Scanner(System.in);
    //System.out.print("Please enter number of boxes:");
    //double boxes = sc.nextDouble();

    // Builds frame for shapes.
    Shapes shape = new Shapes();
    shape.setPixelDimOfSquare(10);

    JFrame frame = new JFrame("Draw Shapes Demo");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    frame.getContentPane().add(shape);
    frame.pack();
    frame.setSize(1000,1000);
    frame.setVisible(true);


    System.out.println("Main: There are " + shape.getCount() + " squares in the circle.");
}
}

【问题讨论】:

  • 如果您打算使用基于窗口的容器,Shapes 不应从 JApplet 扩展。您应该使用更像JPanel 的东西并覆盖它的paintComponent 方法(并在进行任何自定义绘画之前调用super.paintComponent
  • 可能当 "System.out.println("Main: There are " + shape.getCount() + " squares in the circle.");" 什么都没有已经画好了……
  • @MadProgrammer 我会考虑使用绘画组件。 paint() 绝对是在为我绘制形状。我可以在框架中看到它们。
  • A Applet 在概念上是它自己的顶级容器,假设由 Web 浏览器管理,它有自己的初始化和管理要求,超出了基于 Windows 的容器的范围跨度>

标签: java methods get set accessor


【解决方案1】:

将你的 setCount 修改为:

public void setCount(){
  count++;
}

【讨论】:

    【解决方案2】:

    这一行是你的问题:

    public void setCount(int n) {count = n++;}
    

    当你说count = n++;时,就相当于

    count = n;
    n = n + 1;
    

    因为n++ 是后自增运算符。 这可能不是您想要的行为。如果你把

    public void setCount(int n) {count+= n;}
    

    每次调用该方法时,它都会将count 增加n+= 运算符只是 count = count + n 的简写


    此外,将方法命名为setCount 会有点误导,如果它实际上将计数增加了给定的数字。这意味着它将设置count = n 而不是count = count + n。我建议将其重命名为 incrementCount

    就个人而言,对于这么简单的事情,我什至不会为 getter 和 setter 烦恼。只需在 for 循环之前定义一个 int count 并使用 count++ 在每次 if 语句评估为 true 时递增它

    【讨论】:

    • 谢谢你。我真的很感谢你的帮助。当我运行它时, getCount() Shapes 类是 7628 ,但 main 中的 getCount() 是 0。这是怎么回事?
    • 发生这种情况是因为您的程序在 AWT 要求之前不会进行任何计算(这可能随时发生),这(在您的情况下)直到 System.out.println 之后才会发生打电话。
    • 您有资源可以让我了解更多信息吗?我认为将 System.out.println 放在 main 末尾会使其在 count 增加后最后调用。
    • 恐怕我没有。如果您想在所有计算完成后打印,我会将 System.out.println 语句放在您的 paint() 方法的末尾。但是,每次 AWT 决定您的组件需要重新绘制时,它都会打印出来,除非您实现了额外的逻辑
    • 嗯还是很有帮助的。谢谢。
    【解决方案3】:

    尝试将您的 setCount 方法更改为:

        public void setCount() {count++;}
    

    每次在 paint 方法中调用时,您的代码都会将 count 设置为 2。

    【讨论】:

    • n++ 其中 n = 1 的计算结果为 1,因为它是一个后增量运算符
    • 在这种情况下应该没有问题。
    • 这不是解决问题的方法,而是答案不准确。
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2013-12-26
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多