我想在另一种方法中使用主变量(Scanner)

时间:2017-06-17 17:44:09

标签: java variables java.util.scanner main-method

import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
class Graph_mod extends Frame {
public static void main( String[] args ) {
    Scanner input = new Scanner(System.in);
    System.out.println("enter v :");
    double v = input.nextDouble();
    System.out.println("enter a :");
    double a1 = input.nextDouble();
    double a2 = a1*Math.PI/180;
    double t = v*Math.sin(a2)/9.8;
    double h = Math.pow(v*Math.sin(a2), 2)/(2*9.8);
  

我想使用这个变量(h,r)

    double r = Math.pow(v,2)*Math.sin(2*a2)/9.8;
    System.out.println("t is" + t );
    System.out.println("h is" + h );
    System.out.println("r is " + r );
new Graph_mod( "graph");
}
@Override
public void paint( Graphics g )
{
g.setColor( new Color( 0x000000 ) );
g.drawLine( 0, 300, 600, 300 );
g.drawLine( 300, 0, 300, 600 );

for( int i = 0; i < 6; i++ )
{
g.drawLine( i*100 , 298 , i*100, 302 );
g.drawLine( 298, i*100, 302, i*100 );
}


g.setColor( new Color( 0xFF0000 ) );
int px=-1;
int py=300;
int x, y;
for( x = 0; x < 600; x++ )
{
y = My_function( x );
g.drawLine( px, py,x, y );
px = x;
py = y;
}
}

private int My_function( int inX )
{
double x, y;
int outY;
x = (inX - 300.)/ 100.;
  

在这里

y = (-4*h/Math.pow(r,2) * x * x) + (4*h/r*x);
outY = (int)( y * -100. + 300. );
return outY;
}

public Graph_mod( String title )
{
super( title );

addWindowListener( new WindowAdapter(){
public void windowClosing( WindowEvent we ){
System.exit( 0 );
}
} );

setBounds( 0, 0, 600, 600 );
setVisible( true );
}
}

我想制作抛物线运动计算器代码,但在制作图表的过程中,我遇到了一些问题。我导入扫描仪并在main方法中使用,但我不能在另一种方法(My_funtion)中使用它。我知道当我使用参数时它会变得更好,但对我来说太难了...请帮忙

1 个答案:

答案 0 :(得分:0)

将变量 h r 声明为类全局,例如:

import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;

class Graph_mod extends Frame {
    private static double h = 0.0;   // Place variable here ***
    private static double r = 0.0;   // Place variable here ***

public static void main( String[] args ) {
    //..........................
    //..........................
    //..........................
    h = Math.pow(v*Math.sin(a2), 2)/(2*9.8);
    r = Math.pow(v,2)*Math.sin(2*a2)/9.8;
    //..........................
    //..........................
}

但是,因为这些变量在 main() 方法中使用,所以必须将它们声明为静态,因为 main() 方法本身是静态的。但是,即使将变量声明为静态,也可以在其他非静态类方法中使用。

如果实际上是想要在某些或所有类方法中使用的Scanner对象本身,则将其声明为类全局,例如:

import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;

class Graph_mod extends Frame {
    Scanner input = new Scanner(System.in);  // Place scanner here ***
    private static double h = 0.0;
    private static double r = 0.0;

public static void main( String[] args ) {
    System.out.println("enter v :");
    double v = input.nextDouble();
    System.out.println("enter a :");
    double a1 = input.nextDouble();
    double a2 = a1*Math.PI/180;
    double t = v*Math.sin(a2)/9.8;
    h = Math.pow(v*Math.sin(a2), 2)/(2*9.8);
    r = Math.pow(v,2)*Math.sin(2*a2)/9.8;
    //..........................
    //..........................
}

现在,您可以在全局声明Scanner对象的类中声明的任何方法中使用 input.nextDouble() 方法,但我不认为这是你真正想要的。我认为您真正要求的是访问特定变量,例如 h r ,这些变量填充在 main() 方法。

相关问题