确定给定整数是有一个数字还是有几个数字的Java程序,无需使用'if'语句
我被要求制作一个java程序来确定输入的整数n是一个数字还是几个数字,程序必须输出n只有一个数字,或者n有几个数字。通过使用if n>=10语句,这似乎很容易,但我不允许使用这些语句,因此我对我应该做什么感到困惑确定给定整数是有一个数字还是有几个数字的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
如果有任何帮助,我将不胜感激。一个带有布尔键的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);
}