Problema com IF/ElSE [E mais algumas coisas]

Olá pessoal. Bem, estou com um probleminha, comecei a estudar JAVA por conta própria, já tive experiências com outras linguagens mas sempre de curta duração. Então, eu consegui aprender algumas coisas e atualmente estou vendo os tutoriais deste site: Java Progressivo. Direto ao assunto: estou na aula 1.1 de Estruturas de Controle de Fluxo e Laços.

Então, estou tentando resolver um probleminha que envolve dizer se o aluno passou ou não mediante a nota dele. Só que eu de início tenho que controlar a entrada, pois quero que sejam inseridas somente notas válidas, que vão de 0.0 á 10.0, mas como a aula sugere, tive que fazer alguns testes e isso me deu uma certa dúvida, quando eu entro com uma nota, por exemplo, 0.1 ou 10.1, o programa não pula pro “else” e imprimi “Nota inválida”, ao invés disso ele imprime isto:

[quote]run:
Digite sua nota entre [0.0 á 10.0]: 10.1
Exception in thread “main” java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextFloat(Scanner.java:2388)
at Aritimetica.main(Aritimetica.java:10)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)[/quote]

Alguém pode me explicar o por que? E como farei para validar somente notas de 0.0 á 10.0 o que passar disto é nota inválida?

E bem, abusando um pouco da paciência de vocês gostaria de saber se vocês me recomendam algum site (BOM) para aprender programação em JAVA. Conto com a colaboração e paciência de vocês.

Desde já grato,
DaniloXP.

Fiz dessa forma e funcionou aqui, tenta aí pra ver se dá certo.

[code]import java.util.Scanner;

public class Aritimetica {
public static void main(String[] args) {

    System.out.printf (" Digite sua nota entre [0.0 á 10.0]: " ); 
    Scanner entrada = new Scanner(System.in); 
    float nota; 

    nota = entrada.nextFloat(); 

    if ( (nota >= 0.0) && (nota <= 10.0) ) { 
        System.out.printf (" Nota válida. \n" ); 
        if(nota >= 6){
            System.out.println("Aluno Aprovado");
        }else{
            System.out.println("Aluno Reprovado");
        }
    } 
    else { 
        System.out.printf (" Nota inválida. \n"); 
    } 

} 

} [/code]

-> Pra aprender Java são muito boas as aulas da XTI no youtube, procura lá que você vai achar.
ps. Quando for colocar um código utiliza a tag Code.

[quote=antonio_m]Fiz dessa forma e funcionou aqui, tenta aí pra ver se dá certo.

[code]import java.util.Scanner;

public class Aritimetica {
public static void main(String[] args) {

    System.out.printf (" Digite sua nota entre [0.0 á 10.0]: " ); 
    Scanner entrada = new Scanner(System.in); 
    float nota; 

    nota = entrada.nextFloat(); 

    if ( (nota >= 0.0) && (nota <= 10.0) ) { 
        System.out.printf (" Nota válida. \n" ); 
        if(nota >= 6){
            System.out.println("Aluno Aprovado");
        }else{
            System.out.println("Aluno Reprovado");
        }
    } 
    else { 
        System.out.printf (" Nota inválida. \n"); 
    } 

} 

} [/code]

-> Pra aprender Java são muito boas as aulas da XTI no youtube, procura lá que você vai achar.
ps. Quando for colocar um código utiliza a tag Code.[/quote]

Também concordo com a resposta do antonio_m ai o link para as vídeo aulas da xTI http://www.youtube.com/playlist?list=PLA03DEA5320ECBF85

Uma dica, procure pelo significado das Exceptions no google ou na api do Java.

http://docs.oracle.com/javase/6/docs/api/java/util/InputMismatchException.html

“Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type.”

Tradução: Lançada por um Scanner para indicar que o token recuperado não corresponde ao padrão esperado para o tipo, ou o token está fora da alcance do tipo esperado.

O que isso quer dizer no seu caso? que você está tentando usar ponto ao invés de virgula. pode fazer o teste e comprovar por si mesmo.