for for循环中的循环

时间:2015-10-10 12:56:58

标签: java loops for-loop ascii

所以我正在研究for循环和嵌套for循环。所以我需要坚持这些作为我的主要功能。

我遇到了一个问题。我可以想到我如何解决它的逻辑......但我无法想象我是如何使用for循环/嵌套for循环。

我必须以10行的方式打印Ascii代码

示例:

XXXXXXXXX

XXXXXXXXX

XXXXXXXXX

(从32-122开始)

到目前为止,这是我的代码:

    public class chars{
    public static void main(String[]args){

        for( int j = 32; j < 122; j++){

            System.out.print((char)j);

//Once above loop is performed 10*...execute a new line..using a for loop..??               
                System.out.println();
                    }
                }
            }    

6 个答案:

答案 0 :(得分:4)

你的外循环应该控制你所依赖的行,而内循环应该是什么列。因此,只有外部循环看起来像这样(有9行):

for (int i = 1; i <= 9; i++)
{
    System.out.println("");
}

这将打印9个换行符,为您提供9行。

现在,你的列逻辑进入了内部,但是在println之前。

for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 10; j++)
    {
        char print = (char)((i * 10) + 32 + j);
        System.out.print(print);
    }
    System.out.println("");
}

这利用一个小的数学技巧来生成序列的数量。第1行= 32至41,2 = 42至51等

另请注意,这比其他可能的答案略显冗长,因为我使用了像你问的嵌套循环。

答案 1 :(得分:2)

直接的方法可能是使用QuakeCore建议的if语句。代码看起来像下面这样:

public static void main(String[] args) {
    for (int j = 32; j < 122; j++) {
        System.out.print((char)j);
        if (j % 10 == 1) {
            System.out.println();
        }
    }
}

在if条件下使用模数函数时会留下一些难看的代码。原因是我们从数字32开始并从它们递增,因此我们得到 j%10 == 1 而不是更好的东西,例如 j%10 == 0 < / em>的

但是,你的问题表明你希望用for循环中的For循环解决它,让我认为这是一项学校任务。这可以通过将循环视为要在2D空间内执行的函数来解决。这样第一个for循环处理行,而内部for循环处理列(或分别是y和x空格)。由此我们可以解决以下问题:

public static void main(String[] args) {
    // Increment row/counter by 10
    for (int row = 32; row < 122; row += 10) {
        for (int col = 0; col < 10; col++) {
            System.out.print((char)(row + col));
        }
        System.out.println();
    }
}

答案 2 :(得分:2)

for循环的语法是:

for ( 初始化 ; 终止条件 ; 增量 {{ 1}} body

但是,上面斜体字的每个项目都是可选的。初始化和增量部分可以有多个组件,用逗号分隔。

因为你知道字符总数是10的倍数,所以我会这样做:

)

请注意,如果字符总数不是10的倍数,那么内部循环可能会打印一些额外内容,因为外部循环的条件仅每10个字符检查一次。

答案 3 :(得分:0)

  

使用for循环/嵌套for循环

试试这个 -

public static void main(String[] args) {

        for (int j = 32; j < 122; j++) {

            System.out.print((char) j);
            if((j-32)%10==0){
                System.out.println();
            }               
        }
    }

此处内部条件将在您打印10个值时更改行

答案 4 :(得分:0)

这将连续10次打印每个char(使用嵌套for循环):

    class DB {

            public static function connect($host, $db_name, $db_username, $db_password) {
                try {
                    $dbh = new PDO('mysql:host=' . $host . ';dbname=' . $db_name, $db_username, $db_password);
                    $dbh->exec("set names utf8");
                    return $dbh;
                } catch (PDOException $e) {
                    die('Error Connecting To DataBase: ' . $e);
                }
            }

        }

        $filtered_keywords = filter_input(INPUT_GET, 'keywords');
        $query = "SELECT * FROM search WHERE 1=1 ";

        $keywords = explode(" ", $filtered_keywords);
        foreach ($keywords as $keyword) {
            $query .= " OR keywords LIKE '%$keyword%' ";
        }
$dbh = DB::connect('localhost', 'db_name', 'root', '');
        $query .=";";
        $sth = $dbh->prepare($query);
        $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
    $output = '';
        foreach ($rows as $row) {
            $id = $row['id'];
            $title = $row['title'];
            $description = $row['description'];
            $key = $row['keywords'];
            $link = $row['link'];
    $output .= "<h2><a href='$link'>$title</a></h2>
                        $descripton";
        }

    print(strlen($output)>0?$output:"No results found for \"<b>$keywords</b>\"");

答案 5 :(得分:0)

如果你必须使用嵌套循环,那么这样的东西可能会起作用:

int lineLength = 10;
int lineCount = (122 - 32) / lineLength;
for (int line = 0; line < lineCount; line++) {
    for (int column = 0; column < lineLength; column++) {
        int index = (line * lineLength) + column;
        System.out.print((char)(32 + index) + " ");
    }
    System.out.println();
}