そのため、グラフ全体が画面に表示されるようにフレームを中央に配置するのに問題があります。現在、プログラムを実行すると、座標系の x 値は正しい範囲ですが、グラフが描画される数百ピクセル上にフレームが中心にあるため、グラフがほとんど見えません。これが私のコードです:
public static int startx = 1;
public static int endx = 500;
static Scanner input = new Scanner(System.in);
int WIDTH = 0;
int HEIGHT = 0;
public GraphSigma(int WIDTH, int HEIGHT) {
this.WIDTH = WIDTH;
this.HEIGHT = HEIGHT;
}
// Draw your spiral here!!!
// You'll need to use a FOR loop to calculate the
// points on the spiral
public void paintSigma(Graphics g){
int prevX=startx;
int prevY=Sigma.Sigma(startx);
Graphics2D g2 = (Graphics2D) g;
g2.translate(0, Sigma.Sigma(endx));
g2.scale(1,-1);
if (endx-startx < 50)
for (int i = startx; i <= endx; i++) {
int x = i;
int y = Sigma.Sigma(i);
g.drawLine(0+prevX, 0+prevY, x, y);
prevX=x;
prevY=y;
};
if (51 < endx-startx && endx-startx < 300)
for (int i = startx; i <= endx; i+=2) {
int x = i;
int y = Sigma.Sigma(i);
g.drawLine(0+prevX, 0+prevY, x, y);
prevX=x;
prevY=y;
};
if (301 < endx-startx && endx-startx < 1000)
for (int i = startx; i <= endx; i+=4) {
int x = i;
int y = Sigma.Sigma(i);
g.drawLine(0+prevX, 0+prevY, x, y);
prevX=x;
prevY=y;
};
if (1000<endx-startx)
for (int i = startx; i <= endx; i+=10) {
int x = i;
int y = Sigma.Sigma(i);
g.drawLine(0+prevX, 0+prevY, x, y);
prevX=x;
prevY=y;
};
}
// This special method is automatically called when the scene needs to be drawn.
public void paintComponent(Graphics g) {
paintSigma(g);
}
public static void main(String[] args) {
// Graphics window size
int WINDOW_WIDTH = endx-startx+20;
int WINDOW_HEIGHT = endx;
JFrame frame = new JFrame();
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setTitle("Sigma Function");
GraphSigma d = new GraphSigma(endx-startx+20, Sigma.Sigma(endx));
frame.add(d);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
私が呼び出しているシグマ メソッドは別のクラスにあります。そのためのコードは次のとおりです。 public class Sigma {
static Scanner input = new Scanner(System.in);
public static int Sigma(int s){
int a = 0;
for(int i=1;i<=s;i++){
if(s%i==0)
a = a + i;
}
return a;
}
public static void main(String[] args) {
System.out.println("Please enter the number you want to perform the sigma function on");
int s = input.nextInt();
System.out.print(Sigma.Sigma(s) +" is the sum of all the divisors of your input" );
}
}
正直なところ、これを正しく中央に配置する方法がわかりません。方法がありませんか? 私は変数をいじっていますが、フレームがどのように中央に配置されるかを変更していないようです。本当にありがとう!