Erro no System.in.read()

/** Segundo programa digitado em Java
Mostrando o Alo vou programar nessa linguagem */

public class Segundo {
public static void main(String[] args) {
int a = 0;
System.out.print(“Nenguem me segura”);
System.out.println(" eu vou aprender java!");
a = System.in.read();
}
}
/* Erro no javac:
Segundo.java:9: unreported exception java.io.IOExceptiom; must be caught or
declared to be thrown
a = System.in.read();
^
*/

A linha que contém: a = System.in.read(); pode lançar uma IOException (erro). Entaum vc tem que tratar isso usando o Try / Catch.

try {
a = System.in.read();
catch (IOException e) {
//Tratar o erro aqui, vou usar isso como exemplo
e.printStackTrace;
}

Bom, achu que eh isso, abraço

Essa thread devia estar no Java Básico:

Esse código está com 3 problemas:

1-> Nenguem != Ninguém :stuck_out_tongue:
2-> System.in.read() te retorna, se não estou enganado, um char. Tem uma classe chamada Scanner só pra capturar dados do teclado. Se vc quiser fazer manualmente mesmo, cria um BufferedReader:

BufferedReader teclado = newBufferedReader(new InputStreamReader(System.in));
a = Integer.ParseInt(teclado.readLine());

3 -> O lance é que nisso vc realiza duas operações com risco de erros:
Leitura de fonte externa && Conversão de uma String em um Inteiro.
Quando vc captura os dados, vc pode ter um erro de IO. Esse erro será tratado como uma exceção em Java. No Java existem vários tipos de exceção que são “lançadas” quando um erro associado a elas é encontrado. No caso dessa em específico, uma IOException. Vc tem duas opções: Pode deixar o programa com erro, ou pode criar um bloco de tratamento de exceções. A sua segunda operação tb lança uma exceção, no caso uma NumberFormatException. Vamos agora à analise das alternativas:

1-> Throw

Essa é a mais fácil, para isso vc só precisa colocar:

public class Segundo throws IOException, NumberFormatException{
/**Seu programa aqui

Fazendo desse jeito, se realmente acontecer uma exceção dessas, o seu programa vai simplesmte lançar ela no console e encerrar com um erro.

2-> Tratamento.

O tratamento de exceções em Java funciona, principalmente, por blocos Try/Catch.
Um bloco Try contém um bloco de código que pode lançar pelo menos uma exceção. Se tudo der bem ele funciona normalmente. Após o bloco Try, vc vai colocar um bloco catch para cada exceção. Se o seu programa lançar uma exceção no bloco Try, ele corre pra ver se essa exceção é tratada em algum bloco catch, caso seja o programa executa esse bloco ao invés de sair do programa. Por exemplo:

public class Segundo 
{ 
public static void main(String[] args)
   { 
   int a = 0; 
   System.out.print("Ninguém me segura"); 
   System.out.println(" eu vou aprender java!"); 
   BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
   System.out.println("Digite um número inteiro");
   do{
     try
       {
       a = Integer.parseInt(teclado.readLine());
       }
      catch(IOException e)
       {System.out.println("Erro de leitura. Favor digitar novamente.");}
       catch(NumberFormatException e)
       {System.out.println("Favor digite um número INTEIRO ¬¬");}
     }
    while(a == 0);
   System.out.println("Vc digitou o número:"+a);
   System.out.println("Parabéns, vc sabe digitar inteiros ^^"); 
 }  
} 

Espero que tenha conseguido ser claro o suficiente.

Só um detalhe, que deve ser corrigido senão geraria um Compile Error:

catch(IOException e)
{System.out.println(“Erro de leitura. Favor digitar novamente.”);}
catch(NumberFormatException ex) //tava com o msm nome
{System.out.println(“Favor digite um número INTEIRO ¬¬”);}

Muito boa explicação

Na verdade não pq a variável só vai valer naquele bloco catch ^^

O erro daria se eu declarasse outra variável com o mesmo nome dentro do escopo da primeira.

Opa malz, deskulpa entaum =D

E quem é que não se confunde com essas coisas de vez em quando? hehehe :stuck_out_tongue:

Na realidade já fui programador em Cobol, cliper, opus e Delphi e quero aprender Java o " b a b á" porque não conheco as sintaxes do Java nem a formação do corpo Java, nem conheço OO, tenho mais ou menos a idéia e estou nos primeiros passos.É claro estou estudando também, e Oque eu conheco são procedures e funçoes uzadas nas linguagens que aprendí. Então eu sei que o programa em java que estou escrevendo, é o mais babaca que já fiz, parece até que é o primeiro programa da minha vida a ser desenvolvido.Mas eu acho que tem que ser na prática que eu deva aprender também, já que só na teoria é difícil de aprender.Não estou usando nenhuma plataforma de desenvolvimento pois isso acho eu que me facita, no entendimento da formação do corpo do programa. Então o programa que estou escrevendo na realidade é assim, e não como o primeiro que postei nesse forum, o qual achei que fosse facilitar o entendimento dele.
/** Primeiro programa digitado em Java
Mostrando o Alo vou programar nessa linguagem */

public class Primeiro {
public static void main(String[] args) {
Adicao ad = new Adicao();
Subtracao sb = new Subtracao();
Limpatela lm = new Limpatela();
Lertecla lt = new Lertecla();
lm.limpa();
System.out.print(“Ninguém me segura”);
System.out.println(" eu vou aprender java!");
ad.soma();
sb.diminui();
lt.tecla();
}

// Criando Classes

static class Adicao {
     int j = 20;
  public void soma() {
     j += 1;
  System.out.println("Jota = "+j);
  }
}
static class Subtracao {
      int x = 40;
  public void diminui() {
       x += 1;
  System.out.println("Xix  = "+x);
  }
} 
static class Limpatela {
      int y = 0;
   public void limpa() {
      for ( y=0;y<60;y++)
      System.out.println(" "); 
   }
}
static class Lertecla {
      char nome;
   public void tecla() {
      nome = System.in.read();
   }
}         

}

O erro que está acontecendo é :
Primeiro.java:40:Possible loss precission
found : int
Required : char
nome = System.in.read();
^
Obrigado pela atenção…

Wow. Bota facilitar nisso! hehehe. Bem vindo ao mundo do Java. Daqui a pouco vc vai começar a entender bem como é que funcionam as coisas. Se quiser eu posso ir te dando umas dicas baseado nesse programa que vc está usando. Esse read que tá dando problema, tá retornando um INT. Uma coisa que eu reparei é que vc está criando classes demais. Vc pode declarar vários métodos na mesma classe, assim, vc pode fazer algo do tipo:

public class teste{
public static void main (String [] args)
{
//MAIN
}
static int soma(int a, int b)
{
return b+a;
//soma "a" a "b"
}
static int diminui(int a, int b)
{
//...
}
}

Eu vou ser forçado a confessar que ME deu umas dúvidas agora nesse seu char. Consultando a API, esse read() retorna um inteiro com o valor do byte lido. Eu tinha a impressão de que ele podia ser espontânemente convertido para um char, mas aparentemente estou enganado. Vc pode fazer como eu disse, criando uma BufferedReader em cima de uma InputStreamReader. Desse jeito vc pode fazer leituras de números de mais de um algarismo, usando “Integer.parseInt(teclado.readLine());”. parseInt(String s) é um método que serve para converter uma String em um inteiro que ela representa e que lança uma NumberFormatException caso a string não seja um número inteiro (algo como “2.3” ou “Azul”). também na subtração vc está usando “x+=1” quando provavelmente quer “x-=1”. Para adições e subtrações unitárias vc também pode usar os operadores ++ ou --. Eles podem ser colocados antes ou depois da mesma. A diferença é que quando você está usando isso para um comparativo (como no seu for, por exemplo), se o operador estiver antes a variável é alterada e então testada. Se estiver depois, ela é testada e então alterada.

Dica do fórum: Quando for postar código ou pedaços de códigos use a tag code para ficar mais fácil de ver

Eu achei q estava criando muita classe mesmo, bom, estou muito grato pela ajuda , só tenho a agradecer a todos que postaram e ajudaram a tirar minhas dúvidas. Muito Obrigado…