【问题标题】:Returning two integers with loops?用循环返回两个整数?
【发布时间】:2014-12-22 01:31:55
【问题描述】:

我是一个正在做循环教程的初学者,我已经完成了以下任务

“战舰板是一个二维网格,坐标为 (0,0)、(0,1)、(0,2) 等。

创建一个名为 PrintCoordinates(int x, int y) 的方法,其中 x 和 y 定义板的大小。打印板上所有可能的坐标。提示:循环可以包含循环”

期望的输出(9、9):

  • (0, 0)
  • (0, 1)
  • (0, 2)
  • (0, 3)
  • ...
  • (0, 9)
  • (1, 0)
  • (1, 2)
  • (1, 3)
  • ...
  • (9, 9)

我的代码在下面

public class Ex3_PrintGrid {

public static void main(String[] args) {

    int grid = printcoordinates(4, 7);
    System.out.println(grid);

    }

public static int printcoordinates(int x, int y){
    int n = 0;
    while ( n < x){
        int m = 0;
        while (m < y){
        m = m + 1;
        return m;
        }

    n = n + 1;
    }
    return n;

}   

我的理由是实现以下步骤

1) 获取y坐标值加1,直到等于方法中声明的值

2) 同时,x 值会等待 y 值增加,然后再自行增加 1

3) 整个过程以新的 (x+1) 值再次循环。

问题是我很困惑如何在一个循环中执行一个循环,在一个方法中返回 2 个整数?

如果我的问题不清楚,请告诉我

更新:

我根据以下提示对代码进行了更改,但在 System.out.println 行仍然出现错误。有谁知道怎么回事?

public static void main(String[] args) {

    printcoordinates (4, 5);    
    }

public static int printcoordinates(int x, int y){
    int n = 0;
    int m = 0;
    while ( n < x){
        while (m < y){
        m = m + 1;
        }

    n = n + 1;
    }
    System.out.println( n, m);  
}   

【问题讨论】:

  • 这毫无意义你的方法被称为printcoordinates,实际上并没有print 任何东西。您的变量名为grid,但它是单个int? Java Class 名称是 UpperCamelCasemethod 名称是 lowerCamelCase

标签: java loops integer


【解决方案1】:

以下是应该帮助您入门的提示:

  • printcoordinates 不应返回任何内容,即为 void
  • 从方法中间返回会立即终止该方法。即使再次调用该方法,您也不会跳回到循环中
  • 在循环中打印不会终止循环,因此您可以在两个循环的内部打印对(即,在您当前返回 m 的地方,打印一对 m, n;在这对周围加上括号。)。

【讨论】:

  • 感谢您的提示!我根据您的提示修改了代码,以制作类似于我上面更新的内容。但它不能工作......你知道出了什么问题吗? ://
  • @KennethYong 那是因为System.out.println( n, m); 需要在第二个while 循环内,即在m = m + 1; 之前的那一行。
  • @KennethYong 应该是System.out.println("("+n+", "+m+")");
  • @KennethYong 这就是我回答的第 1 点:方法的返回类型必须是 void
  • @KennethYong 您需要将int m = 0; 声明移动到第一个while 循环中,以便m 每次迭代都会重置。
【解决方案2】:

Java 是单次返回。您只能从方法中返回单个原语或对象。

如果你想一次返回 2 个值,不清楚你真正想要做什么。您需要定义一个对象来保存这些数据,例如。

public class Coordinate
{
    public final int x;
    public final int y;

    public Coordinate(final int x, final int y) { this.x = x; this.y = y; }
}

将您的方法签名更改为public static Coordinate findCoordinate(final int x, final int y)

使用 final Coordinate c = new Coordinate(x,y); 创建一个新的,并使用 return c; 返回它

【讨论】:

    【解决方案3】:

    要返回您的坐标对,您应该首先定义一个类 Coord 类似

    class Coord {
        private int x;
        private int y;
    
        public Coord(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        @Override
        public String toString() {
            return String.format("(%d, %d)", x, y);
        }
    }
    

    那么你的方法应该是获取ListCoord 实例。类似的,

    public static List<Coord> getCoordinates(int x, int y) {
        List<Coord> al = new ArrayList<>();
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                al.add(new Coord(i, j));
            }
        }
        return al;
    }
    

    终于可以在main点赞了

    public static void main(String[] args) {
        List<Coord> grid = getCoordinates(4, 7);
        System.out.println(grid);
    }
    

    输出是(为帖子格式化)

    [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (1, 0), (1, 1),
     (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 0), (2, 1), (2, 2), (2, 3),
     (2, 4), (2, 5), (2, 6), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5),
     (3, 6)]
    

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 2019-03-12
      • 2014-12-29
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多