有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何解决Java中的内存溢出错误;与字符串相关

我想制作一个程序,使用^{}输出一个字符串重复给定次数(由空格分隔),但是当字符串重复太多次时,它会运行到java.lang.OutOfMemoryError。如何确定字符串可以重复的最大次数而不会导致内存不足错误

我在线搜索字符串的最大长度,得到2147483647。在我的代码中,我将这个最大长度除以要重复的字符串的长度。我希望它能自动四舍五入,所以我使用了int数据类型。我希望我的程序能够打印单词,但它没有打印结果,而是生成内存不足错误。最大字符串长度正确吗?如果不是,最大字符串长度是多少

import java.util.*;
public class Darshit {
  public static void main(String[] Darshit1) {
    Scanner Darshit = new Scanner(System.in);
    System.out.println("WELCOME TO WORD RE-PRINTER!");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("Enter the text");
    String b = Darshit.nextLine();
    int len = b.length()+1;
    int e = 2147483647/len;
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("How many times you want to repeat the text");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("Note ~>");
    System.out.println("You can only print the word upto " + e + " times!");
    int a = Darshit.nextInt();
    String c = " ";
    String d = b + c;
    System.out.println(d.repeat(a));
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("Thank you for using it");
    System.out.println("Made by Darshit Sharma");
    System.out.println("8th-C");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  }
}

共 (1) 个答案

  1. # 1 楼答案

    一般来说,有两种处理错误的方法:

    1. 事先测试执行操作是否会导致错误,如果会,则不执行操作(防御性编程)
    2. 发生错误时捕获错误(异常处理)

    不同的平台对于在哪种上下文中首选哪种方法有不同的约定(假设甚至支持异常处理)。但是,在这种情况下,没有可靠的方法来测试是否会因为重复字符串太多次而导致错误

    在许多情况下,handling an ^{}不会导致任何结果,因为没有办法恢复并使应用程序恢复到有效状态,主要是因为如果应用程序内存不足,它可能无法执行任何有用的操作。它可能能够记录或打印一条消息,解释它崩溃的原因,这样程序就可以捕获&;改头换面,但通常不会更多。在这种情况下,您的程序有足够的内存用于大多数任务(只是不足以用于分配重复字符串的主要任务),并且非常简单,您可以简单地处理它:打印一条解释发生了什么的消息。在此之后,应用程序已经接近退出,因此不需要其他处理

        try {
            System.out.println(d.repeat(a));
        } catch (java.lang.OutOfMemoryError oome) {
            System.err.println("I ran out of memory trying to repeat the string. You asked for too many repetitions.");
        }