程序输出使用单独的包

时间:2012-03-31 14:14:32

标签: java

我正在学习包装。我有两个不同包的类,我的输出似乎有问题。

以下是主要的课程: 我的两个问题是底部的两个部分“必需的字符串测试”和“字符串选择测试”

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问题是程序没有打印任何东西。似乎代码段不会打印我的提示或任何其他元素。

我是新手,这是家庭作业,所以任何暗示,线索或帮助我走过这一点都是值得赞赏的。

1 个答案:

答案 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;
}