好的,我之前发过一次,但是因为没有表现出基本的理解而被锁定了,我在锁定之前得到的答案对我没有帮助。我是一个超级初学者级别的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();
}
} }
答案 0 :(得分: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");
}
}
}
}
<强>理由强>
此解决方案将匹配多个ANY长度,而不仅仅是适合int
或long
的长度;所以它优于使用Integer.parseInt
或Long.parseLong
,如果数字太长,它们都会失败。关于什么构成数字,这种方法也可以适应更复杂的规则;例如,如果我们决定允许带逗号分隔符的数字(例如"12,345"
当前将被视为不是数字);或者,如果我们决定禁止带有前导零的数字(例如"0123"
,目前将被视为数字)。这使得该方法比使用Integer.parseInt
或Long.parseLong
更通用,它们都带有一组固定的规则。
正则表达式说明
正则表达式是一种可用于匹配部分或全部String的模式。这里使用的正则表达式是-?\d+
,这需要一些解释。符号?
表示“可能”。所以-?
的意思是“也许是一个连字符”。符号\d
表示“一个数字”。符号+
表示“任意数量的这些(一个或多个)”。所以\d+
表示“任意数量的数字”。因此,表达式-?\d+
表示“可选的连字符,然后是任意数量的数字”。当我们在Java程序中编写它时,我们需要将\
字符加倍,因为Java编译器将\
视为转义字符。
可以在正则表达式中使用许多不同的符号。有关所有内容,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html。
答案 1 :(得分: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");
}
}
}
}
答案 2 :(得分:0)
正如其他答案中已经提到的,您需要使用
静态调用parseDoubleDouble theNumber = Double.parseDouble(numberString);
接下来,您将需要查看将其包装在try/catch中,以便您可以在创建数字时进行偶数/奇数检查,或者如果捕获到异常则设置错误消息。
答案 3 :(得分:0)
由于您是初学者,您需要了解数字之间的差异(整数,双精度,字符串,字符),因此以下内容将指导您。
首先,一次读取一行输入, Java read line from file)
然后扫描线寻找形成你认为是整数的字符(允许前导空格?,然后是'+'或' - ',然后是数字0-9,然后是尾随空格。
以下是规则(整数)
除此模式之外的任何内容都违反了'这是一个整数'的测试。 Btw,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.");
}
}
}