Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定给定整数是有一个数字还是有几个数字的Java程序,无需使用'if'语句_Java - Fatal编程技术网

确定给定整数是有一个数字还是有几个数字的Java程序,无需使用'if'语句

确定给定整数是有一个数字还是有几个数字的Java程序,无需使用'if'语句,java,Java,我被要求制作一个java程序来确定输入的整数n是一个数字还是几个数字,程序必须输出n只有一个数字,或者n有几个数字。通过使用if n>=10语句,这似乎很容易,但我不允许使用这些语句,因此我对我应该做什么感到困惑 如果有任何帮助,我将不胜感激。一个带有布尔键的hashmap如何:true和false以及要显示的字符串值 像这样的 public static void main(String[] args) { HashMap<Boolean, String> m = new

我被要求制作一个java程序来确定输入的整数n是一个数字还是几个数字,程序必须输出n只有一个数字,或者n有几个数字。通过使用if n>=10语句,这似乎很容易,但我不允许使用这些语句,因此我对我应该做什么感到困惑


如果有任何帮助,我将不胜感激。

一个带有布尔键的hashmap如何:true和false以及要显示的字符串值

像这样的

public static void main(String[] args) {
    HashMap<Boolean, String> m = new HashMap();
    m.put(Boolean.TRUE, "n has just one digit" );
    m.put(Boolean.FALSE, "n has several digits" );

    int n = 14;

    System.out.println(m.get( Math.abs(n) < 10));
}
您还可以通过使用功能接口和lambda获得更动态的输出:

    HashMap<Boolean, Consumer<Integer>> mFancy = new HashMap();
    mFancy.put(Boolean.TRUE, x -> System.out.println(x + " has just one digit") );
    mFancy.put(Boolean.FALSE, x -> System.out.println(x + " has several digits") );

    mFancy.get(Math.abs(n) < 10).accept(n); // 14 has several digits
显然,这都是精心设计的,但它确实表明,您可以将Map视为switch语句

我的答案假定为int类型

说明:

首先使用Math.abs解释负值 通过toString将int转换为String 最后,使用length获得字符串长度 编辑以更精确地匹配描述: 将return类型更改为boolean,并将return语句作为比较语句。然后在漂亮的印刷品中使用比较

更新功能:

private boolean digitHasLengthOne( int n )
{
    return Integer.toString( Math.abs( n ) ).length() == 1;
}
来电者:

System.out.println( "Number has more than one digit: " + digitHasLengthOne() );
第二次编辑以符合精确字符串: 定义答案图:

Map<Boolean, String> answers = new HashMap<>();
answers.add( Boolean.TRUE, " has just one digit." );
answers.add( Boolean.FALSE, " has several digits." );
漂亮的印花:

System.out.println( n + answers.get( digitHasLengthOne( n ) );
本例根据提供的布尔键检索答案。避免if和三元。

轻松的日本式

备选案文1:


提示:可以使用条件表达式三元运算符。此外,n可能是负数,在这种情况下,n>=10可能不足以作为条件。Math.exp应该能够做到这一点。如果这是从某种java初学者课程中获得的,他们可能只是希望您使用其他方式来表示条件,否则,为了乐趣而不是实用性而做一些事情可能是一个难题。你能给出更多的上下文吗?取绝对值,转换成字符串,使用Stringlength作为位数。这只适用于整数。谁不允许您编写if语句?如果您受到人为限制,请编辑问题以包含全部详细信息。有可能您误解了约束。这将是一个相当大的哈希图。David我终于明白了。你应该在你的答案中添加更多的细节。类似printmyMap[absn>=10]的内容。你的答案似乎是正确的,但如果没有更多的细节,就很难提高投票率。好吧,这可以得出长度,但并不能真正回答一个问题:如果没有if语句,如何表示一个数字有多个数字。好的。只需将返回类型更改为boolean,并将return语句更改为return Integer.toString Math.abs n.length==1;可以在print语句中使用它。OP说print语句应该说n有几个数字,或者n有一个数字,而不使用if语句。所以你还没有解决这个问题。我看到的另外两个答案是三元运算符,对我来说这似乎是作弊,但谁知道教授想要什么,以及从布尔到字符串的映射。所以,如果我们把你的修正答案和地图答案结合起来,我们就有了一个完整的解决方案。如果漂亮的指纹需要精确匹配,那么他们想要的应该是三元运算符。这可能是。事实上,我更喜欢map解决方案,因为除了场景之外,它根本不涉及任何条件。这已经在评论中多次提出。OP不确定是否允许三元。
private boolean digitHasLengthOne( int n )
{
    return Integer.toString( Math.abs( n ) ).length() == 1;
}
System.out.println( n + answers.get( digitHasLengthOne( n ) );
public static String check(int n) {
    return Math.abs(n) < 10 ? (n + " has just one digit")
                            : (n + " has just several digits");
}
public static String check(int n) {
    Map<Boolean, String> map = Map.of(
            true, "%s has just one digit",
            false, "%s has just several digits");
    return String.format(map.get(Math.abs(n) < 10), n);
}
public static String check(int n) {
    String[] arr = { "%s has just one digit", "%s has just several digits" };
    int i = Math.min(1, Math.max(n - 9, 0));
    return String.format(arr[i], n);
}