【问题标题】:Morgan and a String摩根和一根弦
【发布时间】:2015-07-21 15:17:42
【问题描述】:

我正在尝试解决这个问题:https://www.hackerrank.com/challenges/morgan-and-a-string

这是我的代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution 
{

   public static void main(String[] args) 
  {
   Scanner sc = new Scanner(System.in);
   int t = Integer.parseInt(sc.nextLine());
    while((t--)>0)
    {
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        System.out.println(ms(s1,s2));
    }
  }

 public static String ms(String s1, String s2)
 {
     StringBuffer sb = new StringBuffer();
     int i,j;
     for(i=0,j=0;i<s1.length() || j<s2.length() ;)
     {
        if(s1.charAt(i)>s2.charAt(j))
            {
                sb.append(s2.charAt(j));
                if(j==s2.length())
                    break;
                else
                    j++;
            }
        else
            {
                sb.append(s1.charAt(i));
                if(i==s1.length())
                    break;
                else
                    i++;
            }
     }

     if(j==s2.length())
     {  
     for(;i<s1.length();i++)
            sb.append(s1.charAt(i));

     return sb.toString();
     }

     else
     {
     for(;j<s2.length();j++)
            sb.append(s2.charAt(j));

      return sb.toString();
      }
   }   
 }

我收到此错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:658)
at Solution.ms(Solution.java:28)
at Solution.main(Solution.java:18)

谁能告诉我哪里出错了?我找不到错误...

【问题讨论】:

  • i&lt;s1.length() || j&lt;s2.length() 在我看来是错误的,首先...我怀疑你想要&amp;&amp; 而不是||,所以当你到达 either 字符串...
  • 旁注:此类问题通常可以通过在调试器中运行程序来解决;或(较少“推荐”:通过为每个重要语句插入跟踪语句。)

标签: java arrays string indexoutofboundsexception


【解决方案1】:

我不知道您正在尝试使用该程序,但我认为这将消除您的错误

for(i=0,j=0;i<s1.length() & j<s2.length() ;)

【讨论】:

    【解决方案2】:

    我刚刚更改了您的 for 循环,如下所示,我可以毫无问题地执行程序

    for(i = 0, j = 0; i < s1.length() && j < s2.length();)
    

    PFB源码

    import java.util.Scanner;
    
    public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = Integer.parseInt(sc.nextLine());
        while ((t--) > 0) {
            String s1 = sc.nextLine();
            String s2 = sc.nextLine();
            System.out.println(ms(s1, s2));
        }
    }
    
    public static String ms(String s1, String s2) {
        StringBuffer sb = new StringBuffer();
        int i, j;
        for (i = 0, j = 0; i < s1.length() && j < s2.length();) {
            if (s1.charAt(i) > s2.charAt(j)) {
                sb.append(s2.charAt(j));
                if (j == s2.length())
                    break;
                else
                    j++;
            } else {
                sb.append(s1.charAt(i));
                if (i == s1.length())
                    break;
                else
                    i++;
            }
        }
    
        if (j == s2.length()) {
            for (; i < s1.length(); i++)
                sb.append(s1.charAt(i));
    
            return sb.toString();
        }
    
        else {
            for (; j < s2.length(); j++)
                sb.append(s2.charAt(j));
    
            return sb.toString();
        }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-28
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多