[Resolvido] Erro de non-static

Pessoa, to recomeçando os estudos de java. Acha que meu problema é simples.

[code]import java.util.Scanner;

public class CalculaArea {

//função que calcula área do círculo
public double calculaAreaCirculo(double valorRaio){
    double pi = 3.14;
    double areaCirculo = (valorRaio*pi)*(valorRaio*pi);
    return areaCirculo;
}

//função que calcula área do triângulo
public double calculaAreaTriangulo(double vBase, double vAltura){
    double areaTriangulo = (vBase*vAltura)/2;
    return areaTriangulo;
}

//função que calcula área do quadrado
public double calculaAreaQuadrado(double vBase){
    double areaQuadrado = vBase*vBase;
    return areaQuadrado;
}

//função que calcula área do quadrado
public double calculaAreaRetangulo(double vBase, double vAltura){
    double areaRetangulo = vBase*vAltura;
    return areaRetangulo;
}

public static void main (String[] args){

    //declara variavel que recebe a escolha
    Scanner numero = new Scanner(System.in);
    int opcao;
    double raio, areaCirculo;

    //Instruções para escolher a área a ser calculada
    System.out.println("Informe o tipo de área a ser calculada:");
    System.out.println("1(circulo),2(triangulo),3(quadrado),4(retangulo):");

    //Verifica qual a escolha
    opcao = numero.nextInt();
    switch(opcao){
        case 1:
        {
            System.out.println("Informe o raio do circulo a ser calculado");
            raio = numero.nextFloat();
            areaCirculo = calculaAreaCirculo(raio);
            System.out.println("Valor da área do circulo:"+areaCirculo);
        }
        case 2:
        case 3:
        case 4:
    }

}

}[/code]

Só que na linha " areaCirculo = calculaAreaCirculo(raio);" da um erro de non-static method. Alguém sabe o que está errado?

Como vc esta dentro de um método estático, todos os demais metodos que serão chamados dentro dele tem que ser estáticos também.

Ou vc pode instanciar o objeto CalculaArea dentro do metodo main;

public static void main (String[] args){  
  CalculaArea calculoArea = new CalculaArea();
  //dentro do case vc chama os metodos

      switch(opcao){  
            case 1:  
            {  
                System.out.println("Informe o raio do circulo a ser calculado");  
                raio = numero.nextFloat();  
                areaCirculo = calculoArea.calculaAreaCirculo(raio);  
                System.out.println("Valor da área do circulo:"+areaCirculo);  
            }  
            case 2:  
            case 3:  
            case 4:  
        }  
}

Ou vc torna os metodos estáticos como:

public static double calculaAreaCirculo(double valorRaio){...}

Dessa forma vc não precisa instanciar o objeto CalculaArea.

nossa… me desculpem…

o davisnog ja respondeu…
hehe

Era isso mesmo pessoal. Muito obrigado.

É comum utilizar esse static ai nessas funções? Não lembro de ver isso em nenhum lugar. Pra mim era comum usá-lo so no main

Isso é comum em metodos utilitários, mais no geral não.
Nessa sua situação, foi porque vc estava chamando os metodos não estáticos dentro de metodo estático.
Bom, no blog da Caelum, tem um post onde você pode tirar mais informações.
http://blog.caelum.com.br/2006/08/08/singletons-e-static-perigo-a-vista/

Blz cara, agradeço demais. Abraço!

opa, qualquer coisa estamos por aqui.