Dúvida sobre erro em objeto Scanner

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

[code]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();
}

}[/code]

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

[quote]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
[/quote]

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.

Por se tratar de uma String, tenta assim:

String ip = entrada.next();

Pode funcionar!
[]'s

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.

[quote=Ermin]Por se tratar de uma String, tenta assim:

String ip = entrada.next();

Pode funcionar!
[]'s

[/quote]

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 ?

Oi romarcio,

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

[quote]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[/quote]

Obrigado.

Mais alguma sugestão ?

Oi romarcio,

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

[quote]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[/quote]

Obrigado.

Mais alguma sugestão ?
[/quote]

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

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

Er…

vocês estão falando da linha :

  Scanner sp = new Scanner();

?

Obrigado.

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

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

[quote=Pedro_GTI]sim… em vez de Scanner sp = new Scanner();

será… (Nome da sua classe) sp = new (Nome da sua classe)();[/quote]

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 ?

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

[code]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();
}
}[/code]

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é…

romarcio,

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

[quote]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[/quote]

você sabe o porque ?

Obrigado pela resposta.

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…

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.

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é

Obrigado, Pedro. Consegui resolver!

[quote=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.[/quote]

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