【问题标题】:Unale to print an integer array list out of a for loop in Java无法从 Java 中的 for 循环中打印整数数组列表
【发布时间】:2020-03-30 15:26:57
【问题描述】:

下面的代码 sn-p。我试图在 for 循环之外初始化变量,但仍然收到相同的错误。

我无法在 for 循环之外打印变量数组。

public class count_test01 {

    public static void main(String[] args) {

        int n = 2;
        countTest(n);
    }


    public static void countTest(int num){

        //int[] longCnt01_intArray01;

        int cnt01, cnt02;
        long longCnt01, longCnt02;

        longCnt01 = 1;

        // int holds 10 digits in length, MAX is 2,147,483,647.
        // long holds holds 19 digits in length, MAX is 9,223,372,036,854,775,807.
        for(int i = 1; i <= 11; i++) { //63; i++) { //(long i = 1; i <= 9000000000000000000L; i++) {            
            longCnt01 *= i; //2; //at 2, i can be <= 63.


            // Convert Integer Count to String.
            String longCnt01String = BigDecimal.valueOf(longCnt01).toPlainString(); 

            //Convert String to Integer Array.
            int[] longCnt01_intArray = new int[longCnt01String.length()];

            for (int i1 = 0; i1 <= longCnt01String.length()-1; i1++){
                longCnt01_intArray[i1] = longCnt01String.charAt(i1) - '0';
            }

            // Create new integer array, save a copy.
            int[] longCnt01_intArray01 = new int[longCnt01_intArray.length];
            for( int i2 = 0; i2 < longCnt01_intArray.length; i2++){

                longCnt01_intArray01[i2] = longCnt01_intArray[i2];
            }

            System.out.println("Count of i           : " + i + "\n");
            System.out.println("Count of longCnt01   : " + longCnt01 + "\n");
            System.out.println("Size of longcnt01    : " + Arrays.toString(longCnt01_intArray) + "\n\n");
        //System.out.println("Size of longCnt01    : " + Arrays.toString(longCnt01_intArray01) + "\n");
        }

        System.out.println("Size of longCnt01    : " + Arrays.toString(longCnt01_intArray01) + "\n");
        System.out.println("Count of longCnt01   : " + longCnt01 + "\n");
}

抱怨代码太多,输入的文本细节不够。

【问题讨论】:

  • 编程的要点之一是如何在正确的范围内声明变量。如果您甚至没有在正确的范围内声明longCnt01_intArray01,为什么还要在互联网上询问这些必需品?出于好奇,我将此代码复制到我的 IDE 中。什么是“longCnt01_intArray”?
  • Java 新手。正确的范围是多少?为什么我不能在 for 循环之外打印初始化变量。
  • 变量在循环外是不可见的,为什么会这样?
  • 这就是我不明白的。为什么不应该是可见的?用同一个方法初始化后不就是全局变量吗?
  • 好的,谢谢 Tim Hunter。

标签: java arrays for-loop printing int


【解决方案1】:

好的,我已经提出了一个可行的解决方案来解决这个问题。不过,我重构了很多代码,只是为了警告您,所以请询问您是否有任何问题或想知道如何根据您的需要调整它,如果它不完全符合您的想法。

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

  public static void main(String[] args) {
    int n = 2;
    countTest(n);
  }

  public static void countTest(int num) {
    int cnt01, cnt02;
    long longCnt01, longCnt02;

    //Make a scalable arraylist to hold all the copies
    List<Integer[]> copies = new ArrayList<>();

    longCnt01 = 1;

    for (int i = 1; i <= 11; i++) { 
      //Moved print here to keep it logically close to it's related component
      System.out.println("Count of i           : " + i + "\n");

      longCnt01 *= i;
      //Moved print here to keep it logically close to it's related component
      System.out.println("Count of longCnt01   : " + longCnt01 + "\n");

      // First thing, refactored the Integer array retrieval into it's own method 
      // and use Integer class instead to make use of a scalable ArrayList
      Integer[] longCnt01_intArray = getIntArrayFromCount(longCnt01);

      // Quick and easy way to make a copy then store in the arraylist for later use
      copies.add(longCnt01_intArray.clone());
    }

    //Use a loop to gro through all copies
    for(int i = 0; i < copies.size(); i++) {
      System.out.println("Size of Copy " + i + ": " + Arrays.toString(copies.get(i)) + "\n");
    }
    System.out.println("Count of longCnt01   : " + longCnt01 + "\n");
  }

  private static Integer[] getIntArrayFromCount(long count) {
    // Convert Integer Count to String.
    String longCnt01String = BigDecimal.valueOf(count).toPlainString();

    // Convert String to Integer Array.
    Integer[] longCnt01_intArray = new Integer[longCnt01String.length()];

    for (int i1 = 0; i1 < longCnt01String.length(); i1++) {
      longCnt01_intArray[i1] = longCnt01String.charAt(i1) - '0';
    }

    //Moved print here to keep it logically close to it's related component
    System.out.println("Size of longcnt01    : " + Arrays.toString(longCnt01_intArray) + "\n\n");

    return longCnt01_intArray;
  }
}

【讨论】:

  • 我会试一试,如果我有问题给你发消息。我很新,Java 的编码风格对我来说并不直观。再次感谢。
  • 惊人的结果。这是Java需要编程的典型格式吗????
  • 我不明白为什么需要 List 声明来存储值,并调用另一种方法进行转换。为什么我的原始代码不起作用?因为我只是将我的计算值复制到另一个数组。这是我的理解被阻塞了。我对编码过程的理解表明它应该可以正常工作。谢谢。
  • 对我来说头疼的是 for 循环和方法中的“Integer[] longCnt01_intArray......”。这些不都一样吗? Aggghhhhhh .....大声笑。
  • 没关系,我看到它是一个数组的数组。本质上,Integer[] longCnt01_intArray 变成了 Integer[][] longCnt01_intArray。我在打印过程中发现了这一点。这是我计划稍后实施的。感谢那。但是我的问题仍然没有解决。为什么 Java 不允许在 for 循环之外打印变量副本。这就是让我感到困惑的地方。感谢您的所有帮助和远见。
猜你喜欢
  • 2019-03-01
  • 2015-11-01
  • 2011-12-08
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多