Dúvida sobre erro em objeto Scanner

17 respostas
A

Olá, bem, estou tendo problemas ao utilizar a classe Scanner. Eu tenho o seguinte código:

import java.io.*;
import java.net.*;
import java.util.Scanner;



public class Scanner
{
   
   
   int port;
   
   public void PortScan()
   {
   	  Scanner entrada = new Scanner (System.in);
   	  
   	  System.out.println("Entre com o IP: ");
   	  
   	  String ip = entrada.nextLine();
   	  
      
      
      System.out.println("Numero de portas: ");
      String aux = entrada.nextLine();
      
      port = Integer.parseInt(aux);
     
      System.out.println("Varrendo portas, aguarde..."+"\n");
     
      try{
        
         InetAddress addr = InetAddress.getByName(ip);
         String hostname = addr.getHostName();
        
         for (int i=0; i < port; i++)
         {
            Socket s = null;
           
            try{
              
               s = new Socket(addr,i);
              
               System.out.println("A porta " + i + " está aberta. " +
                     "" + hostname);
            }
            catch(IOException ex){}
           
            finally{
               try{
                  if (s != null)
                     s.close();  
               }
               catch(IOException ex){}
            }
         }
        }
        catch(UnknownHostException ex){
           System.err.println(ex);
      }
       
        System.out.println("\n"+"Fim");
   }
   
   public static void main(String args[])
   {
      Scanner sp = new Scanner();
      sp.PortScan();
   }

}

É um portscan super simples. O problema é ao compilar, eu obtenho o seguinte erro:

andre@darkstar:~$ javac Scanner.java Scanner.java:4: Scanner is already defined in this compilation unit import java.util.Scanner; ^ Scanner.java:16: cannot find symbol symbol : constructor Scanner(java.io.InputStream) location: class Scanner Scanner sp = new Scanner (System.in); ^ Scanner.java:20: cannot find symbol symbol : variable entrada location: class Scanner String ip = entrada.nextLine(); ^ Scanner.java:25: cannot find symbol symbol : variable entrada location: class Scanner String aux = entrada.nextLine(); ^ 4 errors

As vezes parece que eu não tenho a java.util aqui. Enfim, a versão do meu Java é: 1.5.0

Alguém tem algum palpite ?

Obrigado!

______
edit:

Estou baixando a nova versão do Java.

17 Respostas

E

Por se tratar de uma String, tenta assim:

String ip = entrada.next();

Pode funcionar!
[]'s

R

Acho que o problema é pq vc criou o nome da classe como Scanner. Coloca ScannerTest por exemplo, que deve parar esse problema.

Ou vc remove o import da classe Scanner e no código faz isso: java.util.Scanner entrada = new java.util.Scanner (System.in); mas acho mais apropriado mudar o nome da classe mesmo.

A

Ermin:
Por se tratar de uma String, tenta assim:

String ip = entrada.next();

Pode funcionar!
[]'s

Oi Ermin, fiz como você sugeriu e o erro persiste. Inclusive testei em outro computador, e o erro é o mesmo, não há nada de errado com minha versão do Java. Inclusive, no outro computador, o NetBeans disse que o import java.util.Scanner não estava sendo usado. Estranho :shock:

Obrigado.

Mais alguma sugestão ?

A

Oi romarcio,

fiz como você sugeriu, alterei o nome da classe para algo qualquer como “test”, o erro agora é:

<blockquote>andre@darkstar:~$ javac test.java

test.java:67: cannot find symbol

symbol  : constructor Scanner()

location: class java.util.Scanner

Scanner sp = new Scanner();

^

test.java:68: cannot find symbol

symbol  : method PortScan()

location: class java.util.Scanner

sp.PortScan();

^

2 errors</blockquote>

Obrigado.

Mais alguma sugestão ?

R

Oi romarcio,

fiz como você sugeriu, alterei o nome da classe para algo qualquer como “test”, o erro agora é:

<blockquote>andre@darkstar:~$ javac test.java

test.java:67: cannot find symbol

symbol  : constructor Scanner()

location: class java.util.Scanner

Scanner sp = new Scanner();

^

test.java:68: cannot find symbol

symbol  : method PortScan()

location: class java.util.Scanner

sp.PortScan();

^

2 errors</blockquote>

Obrigado.

Mais alguma sugestão ?

Como vc alterou o nome da classe, precisa alterar no método main também. A instancia da classe para o nome novo.

P

Troca o Scanner do main por test agora… ja q sua classe agora se chama test

A

Er…

vocês estão falando da linha :

Scanner sp = new Scanner();

?

Obrigado.

P

sim… em vez de Scanner sp = new Scanner();

será… (Nome da sua classe) sp = new (Nome da sua classe)();

A

Pedro_GTI:
sim… em vez de Scanner sp = new Scanner();

será… (Nome da sua classe) sp = new (Nome da sua classe)();

Meu caro, mas isto não tem nada a ver, pois nesta linha eu estou criando um novo objeto do tipo Scanner.

Obrigado pela resposta.

Mais alguma sugestão ?

R

Se vc alterou o nome da classe que era Scanner, para Test, então:

import java.io.*;  
import java.net.*;  
import java.util.Scanner; 

public class Test {
   int port;

   public void PortScan() {
   Scanner entrada = new Scanner (System.in);  
   ...
   }
   
   public static void main(String args[])
   {
      Test sp = new Test();
      sp.PortScan();
   }
}
P

Antes vc estava criando um objeto Scanner mas não do pacote util… mas da sua classe que se chamava Scanner(péssima pratica) c vc mudou o nome da sua classe vc tem que criar o objeto de acordo com sua classe meu caro… um conselho… da uma lida sobre a sintaxe da linguagem, OOP e Java Beans… pq metodos começam com letra minuscula…

Até…

A

romarcio,

obrigado, agora compilou sem erro algum. Entretanto, na hora de varrer as portas ele acusa um erro:

<blockquote>Entre com o IP:

127.0.0.1

Numero de portas:

Exception in thread “main” java.lang.NumberFormatException: For input string: “”

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:470)

at java.lang.Integer.parseInt(Integer.java:499)

at test.PortScan(test.java:27)

at test.main(test.java:68)

Java Result: 1</blockquote>

você sabe o porque ?

Obrigado pela resposta.

P

Se vc esta convertendo uma string para um Integer… vc nao deve colocar “ponto” no meio do numero… c nao vai da um NumberFormatException mesmo…

R

Não vejo problema, pelo que vi no código, mas pode alterar isso:

String aux = entrada.nextLine();
      port = Integer.parseInt(aux);

por isso:

port = entrada.nextInt();

Vê se funciona.

P

No codigo nao tem problema mesmo não… mas c o usuario digitar alguma coisa q nao for numero na hora da converção vai ocorrer a exception… c cv quer tratar a entrada do usuario… bota a parte de entrada dentro de um try/catch que trate a exceção NumberFormatException…

até

A

Obrigado, Pedro. Consegui resolver!

A

romarcio:
Não vejo problema, pelo que vi no código, mas pode alterar isso:

String aux = entrada.nextLine();
      port = Integer.parseInt(aux);

por isso:

port = entrada.nextInt();

Vê se funciona.

Fiz como você sugeriu, e consegui sanar o problema. Obrigado Pedro e Romarcio pelas respostas.

Criado 23 de novembro de 2010
Ultima resposta 23 de nov. de 2010
Respostas 17
Participantes 4