2016-01-05 13 views
5

Tôi đã tự hỏi làm cách nào để sửa chương trình truy cập nguyên âm của mình, tôi đã tìm kiếm qua nhiều diễn đàn nhưng không có bất kỳ may mắn nào. Mô tả của phòng thí nghiệm là "thay đổi tất cả các nguyên âm trong Chuỗi thành số. Đảm bảo các số nằm trong khoảng từ 0-9 và bạn đặt lại số thành 0 khi bạn đếm đến số> 9". Vì vậy, một đầu vào mẫu sẽ là "abcdef" và đầu ra mẫu sẽ là "0bcd1f".Số nguyên âm được thay thế bằng chuỗi Java

Mã chính của tôi là

public class VowelCounter 
{ 
    public static String getNumberString(String s) 
    { 
     int counter = 0; 
      for(int i = 0; i<s.length(); i++) 
      {char g = s.charAt(i); 
      if(g =='a') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='e') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='i') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='o') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='u') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='A') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='E') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='I') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='O') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='U') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      } 
     return s; 
    } 
} 

Các Runner Class là

public class VowelCounterRunner 
{ 
    public static void main (String[] args) 
    { 
     System.out.println(VowelCounter.getNumberString("abcdef")); 
     System.out.println(VowelCounter.getNumberString("hhhhhhh")); 
     System.out.println(VowelCounter.getNumberString("aaaaaaa"));  
     System.out.println(VowelCounter.getNumberString("catpigdatrathogbogfrogmoosegeese")); 
     System.out.println(VowelCounter.getNumberString("hhhhhhh1234356HHHHDH")); 
     System.out.println(VowelCounter.getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj")); 
     System.out.println(VowelCounter.getNumberString("")); 
     System.out.println(VowelCounter.getNumberString("x")); 
     System.out.println(VowelCounter.getNumberString("e")); 

    } 
} 

Các lỗi tôi đang trải nghiệm là với thay thế phương pháp. Nó nói rằng có "không có phương pháp phù hợp được tìm thấy để thay thế (char, int), phương thức java.lang.String.replace (char, char) không được áp dụng; (đối số không khớp; có thể chuyển đổi mất từ ​​int sang char) Đây là lớp lập trình đầu tiên của tôi, vì vậy tôi thật sự tránh khỏi thất bại trên làm thế nào để sửa lỗi này.

Trả lời

5

Bạn đang gọi thay thế bằng giá trị int - java sẽ không tự động chuyển đổi int này thành ký tự. Bạn cần chuyển đổi int một cách rõ ràng thành char có thể đọc được của con người. Đây là một sửa chữa nhanh chóng và dơ bẩn:

Thay đổi tất cả các cuộc gọi đến s.replace

s = s.replace(g,(counter+"").charAt(0)); 

Bạn sẽ tìm thấy vẫn còn có những vấn đề khác trong mã của bạn, ngay cả khi thay thế là cố định. Mã mà nên làm việc:

s = s.substring(0,i) + counter + s.substring(i); 

Lý do này không đòi hỏi một chuyển đổi rõ ràng về giá trị int là bởi vì các nhà điều hành concatentation (+) chuyển đổi nó để nhắn tin cho bạn.

Tóm tắt:

  • Trong Java, các loại không chỉ đơn giản là trộn - int != char, bạn phải nói với trình biên dịch như thế nào bạn muốn nó được chuyển đổi

  • s.replace sẽ không gây ra bất cứ điều gì trong s thay đổi , bạn cần phải đặt s thành kết quả của s.replace - loại khó khăn để quấn đầu của bạn xung quanh khi bạn bắt đầu, nhưng bạn sẽ nhận được nó với thực hành

  • s.replace sẽ thay thế tất cả các trường hợp của một bức thư trong chuỗi với điều tương tự, mà tôi không nghĩ rằng bạn muốn

5

Java Stringbất biến, và bạn không gán kết quả của replace (nhưng tôi muốn một StringBuilder, bởi vì nó là Có thể thay đổi được) Tiếp theo, sử dụng switch, theo ý kiến ​​của tôi, dễ đọc hơn ở đây, như là một for-each loop. Đặt nó lại với nhau, nó có thể trông giống như

public static String getNumberString(String s) { 
    if (s == null || s.isEmpty()) { 
     return ""; 
    } 
    StringBuilder sb = new StringBuilder(s.length()); 
    int counter = 0; 
    for (char ch : s.toCharArray()) { 
     switch (Character.toLowerCase(ch)) { 
     case 'a': case 'e': case 'i': case 'o': case 'u': 
      sb.append(counter); 
      counter++; 
      if (counter > 9) { 
       counter = 0; 
      } 
      break; 
     default: 
      sb.append(ch); 
     } 
    } 
    return sb.toString(); 
} 
1

Các lỗi biên dịch được đem lại cho bạn một đầu mối (Tham khảo javadocs vào phương pháp replace) .Bạn đang cố gắng sử dụng số nguyên để thay thế một ký tự, những gì bạn cần làm là thay thế nguyên âm bằng giá trị ký tự của số như '1' hoặc '2', v.v.

Đồng thời gọi thay thế trên chuỗi sẽ trả về bản sao mới của chuỗi nên ngay cả khi bạn đang gọi thay thế, bạn sẽ không nhận được hiệu ứng mong muốn. Suy nghĩ một chút khác nhau ở đây (mảng, StringBuffers vv)

0

Ở đây bạn đi,

import java.util.*; 
import java.lang.*; 

class Rextester 
{ 
    public static final int ASCII_0 = 48; 
    public static String getNumberString(String s) 
    { 
     int counter = 0; 
     for(int i = 0; i<s.length(); i++) 
     { 
      char g = Character.toLowerCase(s.charAt(i)); 
      if(g =='a' || g =='e' || g =='i' || g =='o' || g =='u') 
      { 
       StringBuilder sb = new StringBuilder(s); 
       sb.setCharAt(i, (char) (counter + ASCII_0)); 
       s = sb.toString(); 
       counter = (counter + 1) % 10; 
      } 
     } 
     return s; 
    } 

    public static void main(String args[]) 
    { 
     System.out.println(getNumberString("abcdef")); 
     System.out.println(getNumberString("hhhhhhh")); 
     System.out.println(getNumberString("aaaaaaa"));  
     System.out.println(getNumberString("catpigdatrathogbogfrogmoosegeese")); 
     System.out.println(getNumberString("hhhhhhh1234356HHHHDH")); 
     System.out.println(getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj")); 
     System.out.println(getNumberString("")); 
     System.out.println(getNumberString("x")); 
     System.out.println(getNumberString("e")); 
    } 
} 

sẽ đưa ra một out-đặt của

0bcd1f 
hhhhhhh 

c0tp1gd2tr3th4gb5gfr6gm78s9g01s2 
hhhhhhh1234356HHHHDH 
lkjd1slwl2jrl3jfl4wjkflwj 

x 
0 

hãy có một cái nhìn tại thử nghiệm của tôi như tốt: http://rextester.com/CEIUP1959

Các vấn đề liên quan