Minha primeira classe... e dá erro

12 respostas
A

Olá pessoal.
Fiz o seguinte programa (simples de tudo) só para testar o uso de classes:


class Prog0102
{
class Carro
{
String Marca;
String Modelo;
int ano;
}
public static void main (String arg [])
{
Carro MeuCarro = New Carro();
MeuCarro.Marca = “Ford”;
MeuCarro.Modelo = “Kombi 8 lugares”;
MeuCarro.ano = 1981;
System.out.println ("Este é meu carro: ", +MeuCarro.Marca, +MeuCarro.Modelo, +MeuCarro.ano);
}
}

Aí, quando vou compilar, surge o seguinte erro:


Prog0102.java:11: error: ‘;’ expected.
Carro MeuCarro = New Carro();
^
1 error

É… não entendi onde raios tá faltando o ponto-e-vírgula que o compilador está “pedindo”. Já coloquei na frente, atrás, no meio, do lado, do outro, de ponta cabeça e nada. Alguém tem alguma idéia?

Obrigado.
A. Potter, the java newba.

12 Respostas

E

vc tem que criar uma instância da classe Prog0102 para acessar a classe aninhada dentro dela. O código que roda segue abaixo:

class Prog0102{ class Carro{ String Marca; String Modelo; int ano; } public static void main (String arg []){ Prog0102 aux = new Prog0102(); Carro MeuCarro = aux.new Carro(); MeuCarro.Marca = "Ford"; MeuCarro.Modelo = "Kombi 8 lugares"; MeuCarro.ano = 1981; System.out.println("Este é meu carro: " + MeuCarro.Marca + MeuCarro.Modelo + MeuCarro.ano); } }

R

O erro ao qual você se refere está aqui:

O “new” é minúsculo, senão o compilador acha que você está apenas declarando uma variável e não instanciando. Como ele não entende o “New” ele pede pra você finalizar o comando de declaração de variável com o ponto e vírgula.

Flws

D

Boa noite Andrew…vejamos, com que nome vc salvou sua classe???
vc deve salvar com o mesmo nome que declarou…
class Carro…Carro.java

[]´s

“Andrew_Potter”:
Olá pessoal.
class Prog0102
{

class Carro
	{
	   String Marca;
	   String Modelo;
	   int ano;
	} 
	public static void main (String arg [])
	{
	   Carro MeuCarro = New Carro();
	   MeuCarro.Marca = "Ford"; 
	   MeuCarro.Modelo = "Kombi 8 lugares";
	   MeuCarro.ano = 1981;
	   System.out.println ("Este é meu carro: ", +MeuCarro.Marca, +MeuCarro.Modelo, +MeuCarro.ano);
	}
}
E

Aí galera, a questão não é o nome da classe. A questão do New que é new também influenciou no código, porém não era apenas este o erro.
Ele usou aninhamento de classes e para acessar uma classe que está dentro de outra, deve-se criar uma uma instância do tipo da classe mais externa, no caso Prog0102 para acessar os atributos e métodos na classe interna Carro.
Neste caso, a solução é: (se tiverem mais alguma, enviem por favor)

Prog0102 aux = new Prog0102();
Carro carro = aux.new Carro();

Assim a classe deve ser salva com o nome Prog0102.java

Valeu galera

A

Segui os seus conselhos. Agora funcionou. Valeu ae pessoal. :grin:
E o que eu mais fiquei p* da vida foi o erro do new/New. Começar programando em VBasic dá nisso… vai ficando mau acostumando…

Mas enfim. Agora já tá funfando normal e eu tenho outra dúvida. Meio saindo do assunto “classes”, meio não, mas em todo o caso, para não ficar criando um monte de tópico, vou perguntar aqui mesmo:

Eu gostaria que o usuário entrasse com os dados da marca do carro. Então, que comando eu usaria no lugar de:

MeuCarro.Marca = “Ford”; /*tendo agora como base o código passado pelo eliselbert */

para fazer a entrada de dados? Seria algo como:

System.in.read(MeuCarro.Marca); /* ??? */

Em todo o caso, eu tentei isso e não funcionou…
E tem algum comando para fazer a entrada de dados “padrão” ou vou ter que usar alguma classe?

Obrigadão.
A. Potter.

E

Você pode usar o JOptionPane, que uma interface gráfica (ficando mais amigável) , mas aí vc teria que fazer uma pequena conversão dos dados de entrada que vem como string, caso as entradas sejam de outro tipo.

fica mais ou menos assim:
import javax.swing.JOptionPane;
public class Teste{
    public static void main(String []args){
       String str = JOptionPane.showInputDialog("Entre com o valor:");
       double number = Double.parseDouble(str);
       JOptionPane.showMessageDialog(null, "Valor String: " + str,                 "Demonstração",JOptionPane.INFORMATION_MESSAGE);
        JOptionPane.showMessageDialog(null, "Valor Double: " + number,                 "Demonstração",JOptionPane.INFORMATION_MESSAGE);
       System.exit( 0 );
    }
}

Qualquer coisa, manda aí...
T+

A

Valeu a dica ae, eliselbert.
Eu fiz uma classe com esse código que vc passou e deu o seguinte erro:


Prog0103.java: In class Prog0103': Prog0103.java: In methodProg0103.main(java.lang.String[])’:
Prog0103.java:27: error: Can’t find method showInputDialog(Ljava/lang/String;)' in typejavax.swing.JOptionPane’.
String str = JOptionPane.showInputDialog(“Entre com o valor:”);
^
1 error

Obrigado.
A. Potter.

PS: estou usando o Linux para programar.

E

Não tenho o linux aqui para testar(O ruindows detonou minhas partições pra variar), mas copiei o código aqui do forum novamente e compilou aqui sem problemas…estou usando o eclipse, e tb compilou via linha de comando…
Vc está usando alguma IDE no linux? Tenta o eclipse for linux se tiver oportunidade…
Qualquer coisa, estamos aqui…
T+

A

Hehehe… bom, vamos lá:

----------------------------
Prog0103.java: In class Prog0103': Prog0103.java: In methodProg0103.main(java.lang.String[])’:
Prog0103.java:27: error: Can’t find method showInputDialog(Ljava/lang/String;)' in typejavax.swing.JOptionPane’.
String str = JOptionPane.showInputDialog(“Entre com o valor:”);
^
1 error


O que tá rolando: "Can’t find method `showInputDialog(Ljava/lang/String;)’ in "; pra mim vc esqueceu de importar o método e o seu compilador tá procurando ele dentro do java.lang, que é o pacote padrão de execução java, que as Strings tão inseridas…

A

Tipo assim, eu ainda não peguei o jeito desse esquema de importar…
Minha(s) dúvida(s): se eu inserir a linha “import javax.swing.*”, onde o programa irá “buscar” o método? No mesmo diretório em que minha classe se encontra?
Onde posso encontrar os métodos “clássicos” tipo java.io e javax.swing? Tem algum site onde eu deva baixa-los ou eles já vem com o compilador e eu estou falando besteira? Se já vier com o compilador, tem como eu ver os métodos que ele tem?

Nossa… desculpae pessoal se eu estiver falando muita bobeira, mas eu sou iniciante bem iniciante mesmo… :oops:

Obrigadão pela ajuda (e pela paciência :roll: )

A

Certo… Bom, o negócio é o seguinte: quando vc está programando, é necessário fazer usos de recursos java (óbvio), mas a questão principal é que seu programa não vai fazer uso de todos os recursos oferecidos, por isso toda vez que se é preciso usar alguma opção “avançada”, é necessário o import antes da declaração de sua classe.
O pacote padrão que te é oferecido é o java.lang., toda vez que você começa um programa, digamos, esse pacote já é “importado” automaticamente. Nele estão contidos algumas coisas básicas, como o uso de Strings. O uso do javax.swing. te dá acesso a algumas opções gráficas 2d, como as familiares janelinhas…
“Ora, eu tô importando isso daonde?”-> você deve ter a jdk(Java Development Kit) na sua máquina, com todas as classes ‘passeando’ por lá, só esperando pra serem usadas… é de lá que vc pode importá-las.
Ao contrário de C++ em que algumas bibliotecas são pagas, Java é tudo gratuito - mais um ponto de grande apelo da linguagem.
Se você quer conhecer os métodos que cada pacote de classes possui, vá ao site da Sun e dê uma olhada na API. Seria bom se vc a tivesse na sua máquina. Toda a documentação deve ter uns 80 mb(não me lembro ao certo).

Bom, em suma é isso: vc só importa se for precisar de algum método que foge ao java.lang…

E

através deste link, vc verá todos os pacotesno canto esquerdo superior e os subpacotes no frame esquerdo inferior, os métodos estarão a direita, daí você poderáfazer uns teste pra entender os pacotes e depois criar seus próprios pacoter que são cruciais para organizar suas aplicações

http://java.sun.com/j2se/1.4.2/docs/api/
valeu

Criado 21 de março de 2005
Ultima resposta 26 de mar. de 2005
Respostas 12
Participantes 5