-1
votes

Comment puis-je gérer la chaîne d'entrée pendant le processus de si, sinon, sinon, y compris Integer.parseint?

Je voudrais gérer cette situation sur la saisie de la mauvaise chaîne, mais une erreur continue à se produire à cause de l'argument d'autre si l'argument.

Essayé essayez, saisissez mais ne savez pas comment l'appliquer à ce code. P>

import java.util.Scanner;

public class game
{
    public static void main(String[] args) {
    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println("if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();

    int answer;
    int multiplier = (int)(Math.random()*8+2);
    int random = (int)(Math.random()*8+2);

    if (input.equals("q"))
    {
        System.out.print("quit the game.");
    }

    else if (Integer.parseInt(input) == 0) 
    {
        System.out.println(random+"times table has been made automatically.");
        System.out.print(random+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {
            System.out.print("Wrong! The right answer is "+random*multiplier+".");
        }

    }

    else if (Integer.parseInt(input)>=2 && Integer.parseInt(input)<=9)
    {   
        int number = Integer.parseInt(input);
        System.out.println("You chose"+number+" times table.");
        System.out.print(number+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {               
            System.out.print("Wrong! The right answer is "+number*multiplier+".");
        }
    }

    else
    {
        System.out.print("Error. Please try again.");
    }   
 }
}


0 commentaires

8 Réponses :


0
votes
if(check>0){
   ...
}

1 commentaires

Je devrais étudier davantage sur l'essayer de continuer à utiliser l'utilisation. En tout cas merci! Je vais essayer cette approche aussi.



0
votes

Avant d'autres blocs, vous pouvez analyser l'entrée comme celle-ci:

if (parsedInput == 0) { ... }
else if (parsedInput >= 2 && parsedInput <= 9) {...}


1 commentaires

Je pense que je devrais en savoir plus sur le codage de style si-retour. Merci :)



0
votes

Essayez ceci, il peut gérer exception xxx


1 commentaires

Merci. Enfin, vous avez eu comment utiliser Essayez d'attraper ce code.



0
votes

Il vous suffit de vérifier que l'entrée fournie par l'utilisateur est numéro ou non. Avant de l'analyser.

J'ai ajouté de nouveaux iSnumberic code> qui renvoie le drapeau booléen en fonction de l'entrée de l'utilisateur et vérifiez-la. P>

jeu de classe publique { p>

public static void main(String[] args) {
    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println(
            "if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();

    int answer;
    int multiplier = (int) (Math.random() * 8 + 2);
    int random = (int) (Math.random() * 8 + 2);

    Game game = new Game();
    boolean isvalid = game.isNumeric(input);
    if (input.equals("q")) {
        System.out.print("quit the game.");
    }

    else if (isvalid && Integer.parseInt(input) == 0) {
        System.out.println(random + "times table has been made automatically.");
        System.out.print(random + " X " + multiplier + " = " + "? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random * multiplier) {
            System.out.print("You're right!");
        } else {
            System.out.print("Wrong! The right answer is " + random * multiplier + ".");
        }

    }

    else if (isvalid && Integer.parseInt(input) >= 2 && Integer.parseInt(input) <= 9) {
        int number = Integer.parseInt(input);
        System.out.println("You chose" + number + " times table.");
        System.out.print(number + " X " + multiplier + " = " + "? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number * multiplier) {
            System.out.print("You're right!");
        } else {
            System.out.print("Wrong! The right answer is " + number * multiplier + ".");
        }
    }

    else {
        System.out.print("Error. Please try again.");
    }
}

public static boolean isNumeric(String str)
{
    for (char c : str.toCharArray())
    {
        if (!Character.isDigit(c)) return false;
    }
    return true;
}


1 commentaires

Merci pour votre suggestion. Je vais l'essayer après avoir étudié une syntaxe plus connexe.



0
votes

Il est évident que vous obtenez cette erreur parce que vous appelez integer.parseint sur une variable de chaîne qui ne contient pas de integer . Ce que vous devriez faire est de mettre un chèque une fois que vous avez reçu l'entrée pour vérifier si la chaîne contient ce dont vous avez besoin. Quelque chose comme ci-dessous xxx

ci-dessous est l'ensemble du code xxx

}


2 commentaires

Merci pour l'explication type. Mais je ne comprends toujours pas que le résultat de l'entrée.Charat (0) peut être comparable à une autre chaîne comme '0' ou '9' en utilisant> = ou <=. Parce que ces résultats ne sont pas de type entier, n'est-ce pas?


@Kris puisque les deux opérandes sont de type Char (0 et INPUT.CHARAT (0)), vous pouvez faire la comparaison comme celle-ci car JVM favorisera ce caractère à l'adresse d'exécution à l'exécution de cette comparaison.



0
votes

Vous ne pouvez pas envoyer de valeurs comme a, b, c etc. pour Integer.parseint (String S) HTTPS: / /docs.oracle.com/javase/7/docs/api/java/lang/integer.html#parseint(java.lang.string) J'ai essayé d'attraper le bloc pour attraper l'exception numériques avec le message pour entrer entier valide

public static void main(String args[]) {


    System.out.println("let's start the multiplication game.");
    System.out.println("which times table do you want to choose?");
    System.out.println("if you want to do it by your choice, please input number among 2~9. Or if you want to do it randomly, please input number 0");
    System.out.println("press \"q\" if you want to quit");
    System.out.println("==>");

    String input;
    Scanner s = new Scanner(System.in);
    input = s.nextLine();

    int answer;
    int multiplier = (int)(Math.random()*8+2);
    int random = (int)(Math.random()*8+2);
   try {
    if (input.equals("q"))
    {
        System.out.print("quit the game.");
    }

    else if (Integer.parseInt(input) == 0) 
    {
        System.out.println(random+"times table has been made automatically.");
        System.out.print(random+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == random*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {
            System.out.print("Wrong! The right answer is "+random*multiplier+".");
        }

    }

    else if (Integer.parseInt(input)>=2 && Integer.parseInt(input)<=9)
    {   
        int number = Integer.parseInt(input);
        System.out.println("You chose"+number+" times table.");
        System.out.print(number+" X "+multiplier+" = "+"? input your answer ==> ");
        answer = s.nextInt();

        if (answer == number*multiplier)
        {
            System.out.print("You're right!");
        }
        else
        {               
            System.out.print("Wrong! The right answer is "+number*multiplier+".");
        }
    }

    else
    {
        System.out.print("Error. Please try again.");
    }
   }
   catch (NumberFormatException e ) {
       System.out.print("pleae enter Valid integer");
   }


1 commentaires

Merci! Essayé par ce code et est venu à réaliser à nouveau comment utiliser essayer le bloc de capture.



-1
votes

Pourquoi ne pas utiliser d'essayer d'attraper? XXX


1 commentaires

En fait j'ai essayé, mais j'ai échoué parce que je ne connaissais pas l'utilisation exacte. Et maintenant je pouvais essayer à nouveau par vous et les conseils des autres! Merci beaucoup :)



0
votes

Vérifiez l'entrée dans deux blocs distincts si / sinon. Ajoutez ce code à votre relevé "autre" pour attraper des chaînes autres que "q". xxx


1 commentaires

Merci pour l'information. Je vais appliquer cela essayer à nouveau à ce code.