【问题标题】:How to call a variable inside of for loop? [duplicate]如何在for循环中调用变量? [复制]
【发布时间】:2019-03-21 18:26:46
【问题描述】:

我似乎无法访问在我创建的 3 个循环中定义的 randElement1randElement2randElement3

我的程序创建了一个字符串,其中包含从列表中选择的 3 个随机元素。

我知道这是一个简单的问题,我确实查过了。我已经阅读了有关 Scopes 的所有内容,但我什至找不到针对我的特定编码问题的解决方案。谢谢。

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Random;

public class Main {
  public static void main(String[] args) 
{
    Scanner userInput = new 
    Scanner(System.in);
    Random rand = new Random();

//Insult Bank
    String[] shakeInsults3 = new String[].{"scut", "apple-john", "baggage", "barnacle", "bladder", "boar-pig", "bugbear", "codpiece","flap-dragon", "giglet", "horn-beast","jolthead","wagtail","scut","pignut","vassal","moldwarp","lout","lewdster","measle","minnow","pumpion","ratsbane","varlet","maggot-pie","harpy"};

    String[] shakeInsults1 = new String[]{"artless", "bawdy", "beslubbering","bootless", "churlish", "cockered", "clouted", "craven", "currish", "dankish", "dissembling", "droning", "errant", "fawning", "fobbing", "froward", "frothy", "gleeking", "goatish", "gozbellied", "impertinent", "infectious", "jarring", "loggerheaded", "lumpish", "mammering", "mangled", "mewling", "paunchy", "pribbling", "puking", "puny", "quailing", "rank", "reeky", "roguish", "ruttish", "saucy", "spleeny", "spongy", "surly", "tottering", "unnuzzled", "vain", "venomed", "villainous", "warped", "wayward", "weedy", "yeasty"};

    String[] shakeInsults2 = new String[]{"base-court", "bat-fowling", "beef-witted", "beetle-headed", "boil-brained", "clapper-clawed", "clay-brained", "common-kissing", "crooked=pated", "dismal-dreaming", "dizzy-eyed","elf skinned", "fat=kidneyed", "fen-sucked", "fool-born", "half-faced", "hell-hated", "onion-eyed", "swag-bellied","reeling-ripe","rude-growing","ill-nurtured","guts-griping","shard-borne"};

//declaring
    int intRandomWord1 = shakeInsults1.length;
    int intRandomWord2 = shakeInsults2.length;
    int intRandomWord3 = shakeInsults3.length;


    for (int s = 0; s < 1; s++) {
      for (int i = 0; i < intRandomWord1; i++) {
          int randIndex1 = (int)(Math.random() * shakeInsults1.length);
          String randElement1 = shakeInsults1[randIndex1];       
  }

      for (int i = 0; i < intRandomWord2; i++) {
          int randIndex2 = (int)(Math.random() * shakeInsults2.length); 
          String randElement2 = shakeInsults2[randIndex2];

      }

      for (int i = 0; i < intRandomWord3; i++) {
          int randIndex3 = (int)(Math.random() * shakeInsults3.length); 
          String randElement3 = shakeInsults3[randIndex3];
      }
    }
    System.out.println("Thou ", + randElement1, ", " + randElement2 + ", " + randElement3 + ".");


  }


}

【问题讨论】:

  • 声明循环外的变量。当您在循环中声明它们时,它们会在循环结束后立即超出范围。
  • 您不能“调用”变量。方法被调用。使用了变量。
  • 您在 for 循环中创建它们。您必须在 for 循环之前创建它们,然后在它们之外初始化它们。

标签: java scope


【解决方案1】:

我认为这就是你想要做的(虽然我现在无法在我的机器上测试它,抱歉。)请注意 Random 只是一个伪随机数生成器,不应该在真正随机性时使用是必须的。在循环内声明的任何变量都不会存在于循环外。这将为 randElement1、2 和 3 每次循环生成一个新字符串。

   // This is so you don't get index out of bounds errors if the lists are different lengths.
   // You could combine these into one line with nested Math.min calls.
   // I made it two lines to be easier for you to read.
   int minListLength = Math.min(shakeInsults1.length, shakeInsults2.length);
   minListLength = Math.min(minListLength, shakeInsults3.length);

   for (int s = 0; s < minListLength; s++) {

          String randElement1 = shakeInsults1[rand.nextInt(shakeInsults1.length)];       

          String randElement2 = shakeInsults2[rand.nextInt(shakeInsults2.length)];

          String randElement3 = shakeInsults3[rand.nextInt(shakeInsults3.length)];

          System.out.println("Thou ", + randElement1, ", " + randElement2 + ", " + randElement3 + ".");

  }

【讨论】:

  • 谢谢!有用。就作用域而言,Java 编程与 python 非常不同。再次感谢!
  • 问题。我似乎找不到如何在 Java 中使用数组函数。我所得到的只是如何使用我不想使用的 Arraylist 库。我在哪里可以了解数组等。
  • 数组在 Java 中是非常基础的,所以它们没有函数。您可以使用 Arrays 类对数组进行一些操作,例如复制和排序。 ArrayList 可以非常强大,因为它有更多功能,它由数组支持,并且可以与 Collections 方法结合以获得更多功能。
  • 对,错字。意味着操纵。感谢您的澄清!干杯!
【解决方案2】:

在 for 循环之外启动它们

【讨论】:

    【解决方案3】:

    你不能在循环内初始化一个变量并在外面使用它,如果你想在外面使用它,你必须在你想使用它的方法里面声明它。

    【讨论】:

      【解决方案4】:

      所以试试这个,让我知道它是怎么回事。

      int randIndex1 = 0;
      String randElement1 = "";
      
      int randIndex2 = 0;
      String randElement2 = "";
      
      int randIndex3 = 0;
      String randElement3 = "";
      
      for (int s = 0; s < 1; s++) 
      {
        for (int i = 0; i < intRandomWord1; i++) 
        {
            randIndex1 = (int)(Math.random() * shakeInsults1.length);
            randElement1 = shakeInsults1[randIndex1];       
        }
        for (int i = 0; i < intRandomWord2; i++) 
        {
            randIndex2 = (int)(Math.random() * shakeInsults2.length); 
            randElement2 = shakeInsults2[randIndex2];
      
        }
      
        for (int i = 0; i < intRandomWord3; i++) 
        {
            randIndex3 = (int)(Math.random() * shakeInsults3.length); 
            randElement3 = shakeInsults3[randIndex3];
        }
      }
      

      我希望这会有所帮助。我不知道您是否要尝试添加任何值或返回任何内容。如果有问题,请发表评论。

      【讨论】:

        【解决方案5】:

        因为您在 for 循环内声明了变量,所以它们的范围仅限于 for 循环内。要在 for 循环之外访问它们,您必须在 for 循环之外声明它们。您可以尝试类似的方法:

        int intRandomWord1 = shakeInsults1.length;
          int intRandomWord2 = shakeInsults2.length;
          int intRandomWord3 = shakeInsults3.length;
        
          String randElement1;
          String randElement2;
          String randElement3;
        
        
          for (int i = 0; i < intRandomWord1; i++) {
              int randIndex1 = (int)(Math.random() * shakeInsults1.length);
              randElement1 = shakeInsults1[randIndex1];       
          }
        
          for (int i = 0; i < intRandomWord2; i++) {
              int randIndex2 = (int)(Math.random() * shakeInsults2.length); 
              randElement2 = shakeInsults2[randIndex2];
          }
        
          for (int i = 0; i < intRandomWord3; i++) {
              int randIndex3 = (int)(Math.random() * shakeInsults3.length); 
              randElement3 = shakeInsults3[randIndex3];
        }
        

        这个解决方案实际上不需要 for 循环。要在不使用 for 循环的情况下进行编程,请尝试类似于 Bakon Jarser 建议的方法。

        【讨论】:

          猜你喜欢
          • 2017-04-25
          • 1970-01-01
          • 2016-03-21
          • 2021-06-13
          • 1970-01-01
          • 2019-04-29
          • 1970-01-01
          • 2022-01-05
          • 2021-01-20
          相关资源
          最近更新 更多