因此,在作业中,我创建了一个方法,它将通过整数数组递增,就像它是一个整数一样。所以我的意思是int []的索引代表数字中的数字。
例如:
int[] digits;
digits = new int[4]
这将是一个4位数字。索引0是1000的位置,索引1是100的位置,索引2是10的位置,索引3是1的位置。 所以我通过这个数组递增的方法如下: 0000,0001 0002,0003,0004, - > 0010,00011,----> 9999。
public void increment(){
if(digits[3] <= 8){
digits[3]++;
}
else{
digits[3] = 0;
if(digits[2] <= 8){
digits[2]++;
}
else{
digits[2] = 0;;
if(digits[1] <= 8){
digits[1]++;
}
else{
digits[1] = 0;
if(digits[0] <= 8){
digits[0]++;
}
else{
digits[0] = 0;
}
}
}
}
}
我的问题是如何制作一个做同样事情的方法,但该方法需要传入一个索引。
例如:
public void increment(int index){
//increments through index number of digits.
}
这样的事情:
increment(7);
将产生:0000000,0000001,0000002,0000003, - &gt; 0000009,0000010,0000011,-----&gt; 9999999。
这是我个人满意的,所以任何帮助都会很棒=)
答案 0 :(得分:0)
这是我的实施:
参考示例:
[0,0]
[0,1]
[0,2]
[0,3]
[0,4]
[0,5]
[0,6]
[0,7]
[0,8]
[0,9]
[1,0]
[1,1]
[1,2]
[1,3]
[1,4]
[1,5]
[1,6]
...
level
表示。还可以省略对数字的一些迭代,因为我们知道某些数字在特定行之前不会增加(例如,如果n
> 1,则最左边的数字不会增加第1行)。您可以通过执行log10(row)
来获取要循环的数字宽度,这将为您提供整数row
减去1的位数。这在代码中称为width
。然后我们需要做的就是检查现在是时候切换row%level == 0
然后我们将值从上面的级别增加1,否则我们只是从上面的行复制相同的值
public static void numbers(int n) {
int nums[][] = new int[(int)Math.pow(10, n)][n];
for(int row=1; row < nums.length; row++) {
int width = (int) Math.log10(row);
for(int col = nums[row].length-1; col >= nums[row].length-1-width; col--) {
int level = (int) Math.pow(10, n - col - 1);
if(row % level == 0) {
nums[row][col] = (nums[row-level][col]+1) % 10;
} else {
nums[row][col] = nums[row-1][col];
}
}
System.out.println(Arrays.toString(nums[row]));
}
}
答案 1 :(得分:0)
除此之外:int [] = digits;
是语法错误;删除=
。
increment
例程需要访问数字数组,并且在Java数组中知道&#39;他们的界限,所以你不需要一个单独的参数或变量的长度。鉴于此,经典的黑客方法(从黑客意味着好的恐龙时代开始)是:
void increment (int[] digits){
for( int i = digits.length; --i>=0 && ++digits[i]==10; ) digits[i]=0;
}
# alter the 10 to change radix, or make it variable if desired
这模仿了你在小学(或至少我做过)学到的程序:从最右边的数字开始,添加一个,如果它没有溢出你已经完成,如果它确实溢出改变它为零并向左移动一个位置,除非当你已经在左端时停止并且不能进一步移动。
答案 2 :(得分:0)
我认为以下内容简单易读:
public class Test{
public static void main(String[] args){
increment(7);
}
static void increment (int index){
index = Math.abs(index) ;
int[] digits = new int [index];
Arrays.fill(digits, 0); //initialize array with 0
for( int i = index-1; i>=0 ; i--) {//loop over all digits
for(int digit = 0; digit <=9 ; digit++) {//increment each
digits[i] = digit;
System.out.println(Arrays.toString(digits));
}
}
}
}