例如:
1)如果用户输入1 11则应打印4。
2)如果用户输入11 111则应打印34。
答案 0 :(得分:2)
使用Java.util.Scanner
执行此操作。这在java中是一个非常基本的东西。我建议你做一些研究:)这是一个简单的教程:
http://www.homeandlearn.co.uk/java/user_input.html
public static void main(String[] args){
Scanner user_input = new Scanner( System.in );
String anInputString;
anInputString = user_input.next( );
if (anInputString.equals("1 11")){
System.out.println("4")
}
if (anInputString.equals("11 111"){
System.out.println("34")
}
}
编辑:
如果您希望输入“4”,而输入位于“1”和“11”之间。或“34”,如果它在“10”和“112”之间你应该试试这个:
public static void main(String[] args){
Scanner user_input = new Scanner( System.in );
int anInputInt;
anInputInt = user_input.nextInt( );
if (0 < anInputInt && anInputInt < 11 ){ //if input is (1-10)
System.out.println("4")
}
if (11 <= anInputInt && anInputInt <= 111){ //if input is (11-111)
System.out.println("34")
}
}
无论如何你应该编辑你的问题:D我认为很多人都很乐意帮助你,但是根本无法理解你的问题0.0
终于在我明白你真正想做的事情之后:
public static void main(String[] args){
Scanner user_input = new Scanner( System.in );
int anInputInt;
anInputInt = user_input.nextInt( );
if(anInputString < 0){
anInputString = anInputstring*(-1);
}
int oneCount = 0;
//gets all numbers in your specified range
//if you want to start at number "xx" change the value of aNumberInRange likewise
for (int aNumberInRange = 0; aNumberInRange < anInputInt; aNumberInRange++){
String str = String.valueOf(aNumberInRange);
//iterates through every character of an aNumberInRange and counts if a "1" occurs
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
if (c == 1){
oneCount++
}
}
}
system.out.println(oneCount);
}
无论谁阅读此解决方案。客户端想要计算指定范围内数字“1”的所有出现次数。这也适用于负数
答案 1 :(得分:0)
我强烈建议您研究问题的数学,然后提出一个聪明的算法,然后再实施。 1s远远不是随机分布在一系列数字中的数字; - )
然而,总有蛮力的方法。 (这只是为了显示一种可能性,也是解决问题的最糟糕方法之一)
int count = 0;
for(int i = 1; i<=11; i++)
{
String number = String.valueOf(i);
while(number.contains("1"))
{
number= number.substring(number.indexOf("1")+1);
count ++;
}
}
System.out.println(count);
修改强> 对于那些对使用log,mod和div更好的蛮力版本感兴趣的人(最好我能想出来^^):
int count2 = 0;
for(int i = lowerbound; i<=upperbound; i++)
{
int temp = Math.abs(i); //make positive. No negative log
if(temp==0) //beware the log(0) trap
continue;
int length = (int)(Math.log10(temp)+1); //count digits
for(int j = length -1; j>=0 ; j--) //inspect digit for digit
{
if(temp % 10 == 1)
{
count2 ++;
}
temp = temp / 10;
}
}
使用nano()测量范围为-1000000到1000000的测试(因此没有单位)。对于CharAt方法,请参阅Tom Wellbrock的回答。 即使log,%和/是非常慢的数学运算,String创建的成本也更高。
没有java Optimization ::
使用java优化(创建字符串变得便宜很多,特别是当它们出现两次并且所有的小调整为什么我们如此喜欢java)