作业帮 > 综合 > 作业

只能用循环语句里面的while语句

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/29 04:36:55
只能用循环语句里面的while语句
编写一个程序使得输入n个整数,遇到0就输出结果.对于每个0之前的整数,计算他们能被2整除的次数(比如1能被2整除一次,2的话就是两次,128是8次……)例如,如果输入的是:
2
9
-7
4
-3
0
那么输出就是:
2
4
3
3
2
只能用循环语句里面的while语句
import java.util.Scanner;
public class TestClass {

public static void main(String[] args){
System.out.println("这是你的示例:");
System.out.println("2 9 -7 4 -3 0");
int[] array = {2,9,-7,4,-3,0}; // 你在知道上的示例

System.out.println("输出结果:");
for(int number : array){// 遍历数组里的每一个数字
// 你要求用while循环,不过这个应该不算的吧? 而且这个可以转换成while循环的

// OR (以下代码是等价的)
// for(int i = 0; i < array.length; ++i){
// int number = array[i];

int index = 0; // 被2整除次数的计数器
while(number != 0 && number / 2 != 0){ // 当遍历到0时中止循环
// 你要求用while循环
index ++;
number = number / 2;
}
System.out.print(index++ + " ");
}
System.out.println("\n_______________________");// 换行


//////////以下是输入后再处理:

Scanner scanner = new Scanner(System.in); // 可以进行输入操作
System.out.println("请输入一个数组,用空格分开,Enter键结束:");
String lineNumber = scanner.nextLine(); // 读取一行用户输入
String[] arrayString = lineNumber.split(" ");// 分隔空格
if(lineNumber.length() > 0){
for(String str : arrayString){
// OR (以下代码是等价的)
// for(int i = 0; i < arrayString; ++i){
// String str = array[i];

int index = 0; // 被2整除次数的计数器
int number = new Integer(str);
while(number != 0 && number / 2 != 0){ // 当遍历到0时中止循环
// 你要求用while循环
index ++;
number = number / 2;
}
System.out.print(index++ + " ");
}
}else{
System.out.println("空!");
}
}
}
再问: 感觉你的已经比较接近了,不过我的那个的要求是每一个非0的数字用ENTER键隔开,知道输入0再按ENTER键的时候,输出结果,能不能修改一下呢,谢谢了!
再答: import java.util.Scanner; public class TestClass { public static void main(String[] args){ ////// 修正的代码: Scanner scanner = new Scanner(System.in); int inputNumber = 0; // 输入的数字 int indexLength = 0; // 输入数字数组长度的计数器,起始长度为最小值0 int[] inputArray = null; // 记录输入的数字 while((inputNumber = new Integer(scanner.nextLine()))!=0){ indexLength ++; int[] tempArray = inputArray; // 临时数组,存放旧数组的值 inputArray = new int[indexLength]; // 因为用户的输入改变了数组的长度,需要一个有新长度的数组 // 没有使用arraycopy 的方法,那样会更简便 if(tempArray != null){ int tempArrayIndex = 0; // 临时数组计数器 while(tempArrayIndex < tempArray.length){ inputArray[tempArrayIndex] = tempArray[tempArrayIndex]; ++tempArrayIndex; } // OR 下面代码等价 //for(int i = 0; i < tempArray.length; ++i){ // inputArray[i] = tempArray[i]; //} } inputArray[indexLength - 1] = inputNumber; } int inputArrayIndex = 0; while (inputArrayIndex < inputArray.length){ int index = 0; while(inputArray[inputArrayIndex] / 2 != 0){ // 当遍历到0时中止循环 // 你要求用while循环 index ++; inputArray[inputArrayIndex] = inputArray[inputArrayIndex] / 2; } System.out.println(++index); ++inputArrayIndex; } // OR 下面代码等价 //for(int i = 0; i < inputArray.length; ++i){ // int index = 0; // while(inputArray[i] / 2 != 0){ // 当遍历到0时中止循环 // 你要求用while循环 // index ++; // inputArray[i] = inputArray[i] / 2; // } // System.out.println(++index); //} } }
再问: 要是没有那个array的储存临时数据的这个函数就完美了,这个我没学,能不能再帮忙改进一下,我知道输入一个,输出一个的代码是这样的:Scanner in = new Scanner(System.in); int a = in.nextInt(), i = 0; while (a != 0) { i = 0; while (a != 0) { i = i + 1; a = a / 2; } System.out.println(i); a = in.nextInt(); } 能不能再这个的基础上改动一些实现输入多个,再输出多个呢?
再答: import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); scanner.useDelimiter("0");//你要是再说你没学,我实现没办法了。 // 这个流不再以换行为结束符号,你输入0,这个流就中止,否则一直读下去 String[] str = scanner.next().split("\r\n"); // 如果你不能编译,把代码替换成:String[] str = scanner.next().removeAll("\r").split("\n"); for(int i = 0; i < str.length; ++i){ int num = Integer.parseInt(str[i]) / 2; int index = 1; while(num!=0){ num = num /2; ++ index; } System.out.println(index); } } } ////////补充的建议:如果你真的想学好Java,就不要再说这句话:我没学过。 如果项目经理要我完成一个模块,然后我对她说:我没学过。那么我下一句听过的话肯定是:明天你别来了! //// 记得我大二的时候用一些很“高深”的方法把C#老师布置的作业完成了,他看到后就问我:你在哪儿抄的?唉,现在中国这教育!! /// 当然,如果你只是业余玩玩,那就不必这么认真了。^_^