我正在学习包装。我有两个不同包的类,我的输出似乎有问题。
以下是主要的课程: 我的两个问题是底部的两个部分“必需的字符串测试”和“字符串选择测试”
import myUtils.util.Console;
public class ConsoleTestApp
{
public static void main(String args[])
{
// create the Console object
Console c = new Console();
// display a welcome message
c.println("Welcome to the Console Tester application");
c.println();
// int
c.println("Int Test");
int i = c.getIntWithinRange("Enter an integer between -100 and 100: ", -101, 101);
c.println();
// double
c.println("Double Test");
double d = c.getDoubleWithinRange("Enter any number between -100 and 100: ", -101, 101);
c.println();
// required string
c.println("Required String Test");
String s1 = c.getRequiredString("Enter your email address: ");
c.println();
// string choice
c.println("String Choice Test");
String s2 = c.getChoiceString("Select one (x/y): ", "x", "y");
c.println();
}
}
这是他们正在访问的类的代码。 (这是在主要顶部导入的Console类)
package myUtils.util;
import java.util.Scanner;
public class Console
{
Scanner sc = new Scanner(System.in);
/******************************************************/
public void println()
{
}
/******************************************************/
public void print(String s)
{
System.out.println(s);
}
/******************************************************/
public void println(String s)
{
System.out.println(s);
}
/*****************************************************/
public int getIntWithinRange (String prompt, int min, int max)
{
int i = 0;
boolean isValid = false;
while (isValid == false)
{
System.out.println(prompt);
if (sc.hasNextInt())
{
i = sc.nextInt();
if (i < min)
{ System.out.println
("Error! Please enter an integer greater than -100");
}
else if (i > max)
{
System.out.println ("Error! Please enter an integer less than 100");
}
else
isValid = true;
}
else
{
System.out.println ("Error! Invalid number value");
sc.nextLine();
}
}
return i;
}
/*****************************************************/
public double getDoubleWithinRange (String prompt, double min, double max)
{
int d = 0 ;
boolean isValid = false;
while (isValid == false)
{
System.out.println(prompt);
if (sc.hasNextInt())
{
d = sc.nextInt();
if (d < min)
{
System.out.println ("Error! Please enter a number greater than -100");
}
else if (d > max)
{
System.out.println ("Error! Please enter a number less than 100");
}
else
isValid = true;
}
else
{
System.out.println("Error! Invalid number value");
sc.nextLine();
}
}
return d;
}
/*****************************************************/
public String getRequiredString(String prompt)
{
String R = "";
boolean isValid = false;
while (isValid == false)
{
System.out.print(prompt);
R = sc.nextLine();
if (R.equals(""))
{
System.out.println("Error! This entry is required. Try again.");
}
else
{
isValid = true;
}
}
return R;
}
public String getChoiceString (String prompt, String s1, String s2)
{
String s = "";
boolean isvalid = false;
while (isvalid == false);
{
s = this.getChoiceString(prompt, s1, s2);
System.out.println(s);
s = sc.nextLine();
if (!s.equalsIgnoreCase(s1) && !s.equalsIgnoreCase(s2))
{
System.out.println("Error! Entry must be '"+
s1 +"', '"+ s2 +"', or '."+ "Try again.");
}
else
{
isvalid = true;
}
}
return s;
}
public int getInt(String prompt)
{
return 0;
}
}
我对getRequiredString的问题是我有一行代码
R = sc.nextLine();
这导致我的输出打印我的错误消息,因为它认为用户没有输入任何内容。当我把它改成一个简单的
R = sc.next();
代码不允许用户输入任何内容。我不确定如何解决这个问题。
我的getChoiceString问题是程序没有打印任何东西。似乎代码段不会打印我的提示或任何其他元素。
我是新手,这是家庭作业,所以任何暗示,线索或帮助我走过这一点都是值得赞赏的。
答案 0 :(得分:2)
疑难杂症!你在while语句后放了一个半冒号,这会导致你的程序停止。
while (isvalid == false); <---
{
....
}
我已将其删除并注意到您的代码进入无限循环,因为getChoiceString
方法不必要地调用自身。因此我也编辑了它(注释了你的递归调用),它现在似乎正在工作!请尝试以下方法:
public String getChoiceString(String prompt, String s1, String s2)
{
String s = "";
boolean isvalid = false;
while (true)
{
if(isvalid == true)
{
break;
}
//s = this.getChoiceString(prompt, s1, s2);
//System.out.println(s);
System.out.println("Enter your String: ");
s = sc.nextLine();
if (!s.equalsIgnoreCase(s1) && !s.equalsIgnoreCase(s2))
{
System.out.println("Error! Entry must be '"+
s1 +"', '"+ s2 +"', or '."+ "Try again.");
}
else
{
isvalid = true;
}
}
return s;
}
编辑:同样在您的getRequiredString方法中,使用R = sc.next();
代替R = sc.nextLine();
,以使您的程序正常运行。请检查以下内容:
System.out.print(prompt);
R = sc.next();
System.out.println("Email address: " + R.toString());
if (R.equals(""))
{
System.out.println("Error! This entry is required. Try again.");
}
else
{
isValid = true;
}