1

わかりました、以前に投稿しましたが、基本的な理解を示していないためにロックされており、ロックされる前に得た回答は役に立ちませんでした。私はJavaの超初心者レベルで、これが私のプログラムでやりたいことです(最後にコードを投稿します)。ユーザーに何でも入力してもらいたい。そして、数字でない場合は、数字を入力する必要があることを表示したい。次に、数字を入力した後、その数字が偶数か奇数かを表示したいと思います。parseInt と parseDouble について読みましたが、思い通りに動作させる方法がわかりません。解析が私がやりたいことかどうかはもうわかりません。数値であるかどうかを確認するためだけに、すぐに数値に変換したくありません。次に、プログラムが文字か数字かを判断した後、処理を続行できます。

わかりました、いくつか変更し、no_answer_not_upvoted から多くのコードを使用しました。これが私が今持っているものです。それは正常に動作し、指示で指定されているように負と正の整数で動作します。私を悩ませている唯一のことは、結局のところ、Eclipseの下部にあるコンパイルボックスでこのエラーが発生することです。プログラムは意図したとおりに動作し、適切に停止しますが、なぜこのエラーが発生するのかわかりません。

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at monty.firsttry2.main(firsttry2.java:21)


public static void main(String[] args) {

    System.out.print("Enter a character or number. This program will run until you enter a whole number, then it will"
            + "tell you if it was even or odd.");

    while (true) {
    Scanner in=new Scanner(System.in);     

    int num;
    while(true)   {
        String input=in.nextLine();
    try {

        num=Integer.parseInt(input);

        break;
        }
    catch (NumberFormatException e) {System.out.print("That wasn't a whole number. Program continuing.");}



    }
    if (num==0) {System.out.print("Your number is zero, so not really even or odd?");} 
    else if (num%2!=0){System.out.print("Your number is odd.");}
    else {System.out.print("Your number is even");}
    in.close();






  } 

} }

4

4 に答える 4

2

予測

文字列が一連の数字 (0 ~ 9) で構成され、場合によっては最初の - 記号を除いて他の文字がない場合、文字列は数値と見なされます。"-0"これにより、やなどの文字列が許可されることは理解していますが"007"、これは数値とは見なしたくないかもしれませんが、最初にいくつかの仮定が必要でした。このソリューションは、テクニックを示すためにここにあります。

解決

import java.util.Scanner;

public class EvensAndOdds {
    public static final String NUMBER_REGEXP = "-?\\d+";
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        for(;;) {   // Loop forever
            System.out.println("Enter a number, some text, or type quit");
            String response = input.nextLine();
            if (response.equals("quit")) {
                input.close();
                return;
            }
            if (response.matches(NUMBER_REGEXP)) {   // If response is a number
                String lastDigit = response.substring(response.length() - 1);
                if ("02468".contains(lastDigit)) {
                    System.out.println("That is an even number");
                } else {
                    System.out.println("That is an odd number");
                }
            } else {
                System.out.println("That is not a number");
            }
        }
    }
}

正当化

intこのソリューションは、またはに収まる長さだけでなく、任意の長さに一致しlongます。そのため、数値が長すぎると失敗するInteger.parseIntorを使用するよりも優れています。Long.parseLongこのアプローチは、数を構成するものに関するより複雑な規則にも適用できます。たとえば、カンマ区切りの数字を許可することにした場合 ("12,345"現在は数字として扱われないなど)。または、先頭にゼロが付いた数字を許可しないことにした場合 ("0123"現在は数字として扱われる など)。Integer.parseIntこれにより、 orを使用するよりもアプローチが汎用性が高くなりLong.parseLongます。どちらも固定のルールセットが付属しています。

正規表現の説明

正規表現は、文字列の一部またはすべてを照合するために使用できるパターンです。ここで使用されている正規表現は で-?\d+あり、これにはいくつかの説明が必要です。シンボル?は「多分」を意味します。So-?は「多分ハイフン」を意味します。記号\dは「数字」を意味します。記号+は「これらの任意の数(1つ以上)」を意味します。したがって\d+、「任意の桁数」を意味します。したがって、この式-?\d+は「オプションのハイフンとその後の任意の桁数」を意味します。Java プログラムで記述する場合は\、Java コンパイラが\エスケープ文字として扱うため、文字を 2 倍にする必要があります。

正規表現で使用できるさまざまな記号がたくさんあります。それらすべてについては、 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.htmlを参照してください。

于 2013-10-15T05:32:52.620 に答える
0

あなたは初心者なので、数字(整数、倍精度、文字列、文字)の違いを理解する必要があるので、以下を参考にしてください。

まず、入力を一度に 1 行ずつ読み取ります 。Java はファイルから行を読み取ります) 。

次に、行をスキャンして、整数と見なされるものを形成する文字を探します (先頭のスペースを許可しますか?、次に「+」または「-」、次に数字の 0 ~ 9、そして末尾のスペースを許可します。

ルールは次のとおりです(整数の場合)

このパターン以外のものは、「これは整数か」のテストに違反します。 ところで、Double は拡張精度の実数です。

import java.lang.*;
import java.util.Scanner;

public class read_int
{
    public static boolean isa_digit(char ch) {
        //left as exercise for OP
        if( ch >= '0' && ch <= '9' ) return true;
        return false;
    }
    public static boolean isa_space(char ch) {
        //left as exercise for OP
        if( ch == ' ' || ch == '\t' || ch == '\n' ) return true;
        return false;
    }
    public static boolean isa_integer(String input) {
        //spaces, then +/-, then digits, then spaces, then done
        boolean result=false;
        int index=0;
        while( index<input.length() ) {
            if( isa_space(input.charAt(index)) ) { index++; } //skip space
            else break;
        }
        if( index<input.length() ) {
            if( input.charAt(index) == '+' ) { index++; }
            else if( input.charAt(index) == '-' ) { index++; }
        }
        if( index<input.length() ) {
            if( isa_digit(input.charAt(index)) ) {
                result=true;
                index++;
                while ( isa_digit(input.charAt(index)) ) { index++; }
            }
        }
        //do you want to examine rest?
        while( index<input.length() ) {
            if( !isa_space(input.charAt(index)) ) { result=false; break; }
            index++;
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.print("Enter a character or number. Seriously, though, it is meant to be a number, but you can put whatever you want here. If it isn't a number however, you will get an error message.");

        Scanner in=new Scanner(System.in);
        String input=in.nextLine();
        if( isa_integer(input) ) {
            System.out.print("Isa number.");
        }
        else {
            System.out.print("Not a number.");
        }
    }
}
于 2013-10-15T04:04:57.097 に答える
0

これはそれを行う方法を示しています

import java.util.Scanner;

public class EvenOdd {
  public static void main(String[] args) {
    System.out.print("Enter a character or number. Seriously, though, it is meant to be a number, but you can put whatever you want here. If it isn't a number however, you will get an error message.");
    try (Scanner in = new Scanner(System.in)) {
      int n;
      while (true) {
        String input=in.nextLine();
        try {
          n = Integer.parseInt(input);
          break;
        } catch (NumberFormatException e) {
          System.out.println("you did not enter just an integer, please try again");
        }
      }
      if (n % 2 == 0) {
        System.out.println(n + " is even");
      } else {
        System.out.println(n + " is odd");
      }
    }
  }
}
于 2013-10-15T02:29:25.107 に答える