2017-11-12 1 views
0

공백, 구두점 및 모든 소문자없이 단어를 취하고 무작위로 문자를 재정렬하는 프로그램을 만들어야합니다. 하위 문자열이나 charAt가 있어야합니다. 아직 배웠기 때문에 배열을 사용할 수 없습니다. 그것은 또한 언제나 다른, 정말로 n입니다 hsa! 나는 생각한다. 이것은 내가 그렇게 멀리있는단어를 취하여 글자를 랜덤 화하고 아나그램을 만드는 자바 프로그램

public static void main(String[] args) { 
     Scanner kboard = new Scanner(System.in); 
     System.out.println("Enter a word that is less than 11 lowercase letters and has no punctuation or spaces: ");  
     String word = kboard.next(); 
     while(word.length()>1) 
     { 
      System.out.print(word.charAt(1)); 
      System.out.print(word.charAt(0)); 
      word = word.substring(2); 
     } 
     System.out.println(word); 
} 

이 단어를 재 배열이 무엇이지만, 그것을 임의마다하지 않습니다. 이런 일을 할 수있을 거라 생각했는데, 지저분해서별로 의미가 없다고 생각합니다.

public static void main(String[] args) { 
     Scanner kboard = new Scanner(System.in); 
     String word, pt1 = "", pt2 = "", pt3 = ""; 
     System.out.println("Enter a word that is less than 11 lowercase letters and has no punctuation or spaces: "); 
     word = kboard.nextLine(); 
     int num1 = 0, num2 = 0, thing = 0; 
     while(thing<4) 
     { 
      thing = thing + 1; 
      num1 = (int)(word.length() * Math.random() + 1); 
      num2 = (word.length() - (word.length() % num1)); 
     } 
      pt1 = word.substring(num1, num2); 
      pt2 = word.substring(num1, num2); 
      pt3 = word.substring(num1, num2); 
      System.out.print(pt1); 
      System.out.print(pt2); 
      System.out.print(pt3); 

문자를 무작위로 추출하려면 어떻게해야합니까?

+0

, 그것은 매우 어려울 것 초보자. 난 당신이 작업 설명에 대한 몇 가지 중요한 세부 사항을 놓치고 있다고 생각합니다. 나는 모든 세부 사항을 포함시켜야한다. – janos

+0

할당은 11 자 미만, 구두점 없음, 공백없이 단어를 임의로 다시 정렬하는 것입니다. 우리는 방금 문자열을 시작했으며 배열로 아직 가지 않았습니다. 그것이 우리가해야 할 모든 것입니다. 그것은 우리에게 단어가 abcde라면 ebadc로 출력 할 수 있다는 것을 보여주었습니다. –

+0

아래에 답으로 문제에 대한 해결책을 제공해 줬습니다. 그러나 정말로 당신과 관련이 없으므로 나는 또한 논평 할 것입니다. 구두점 및 공백없이 소문자 11 자 이내로 입력하도록 요청한 경우 해당 사례에 대한 입력을 확인해야합니다. 예 : 방법 isLowerCase, isWhiteSpace 등등 (클래스 문자) – zbyszekt

답변

1

고정 된 세트의 요소를 "무작위 추출하는 방법"에 대한 간단한 해결책은 셔플입니다.

단순히 문자열을 문자 목록으로 바꾸면 그 목록에 shuffle이 표시됩니다.

(해당 목록을 만드는 데 걸리는 시간은 new ArrayList<>(yourWord.toCharArray()입니다.)

1

GhostCat 몇 초에 나를 이길 :) 무엇 이것에 대해

char[] arr = "abcdefg".toCharArray(); 
    List<Character> list = new LinkedList<>(); // copy the chars to a list 
    for (int i = 0; i < arr.length; i++) { 
     list.add(arr[i]); 
    } 
    Collections.shuffle(list); // use to shuffle 
    for (int i = 0; i < arr.length; i++) { // copy the shuffled chars back to the array 
     arr[i] = list.get(i); 
    } 
    System.out.println(new String(arr)); 
+1

코드 내려 놓기에 대한 내 투표를 얻으십시오 :-) – GhostCat

+1

배열을 사용하는 방법을 모릅니다.이 프로그램에서 사용할 수 없습니다. –

0

: 기본적으로 당신이 문자열을 받고

public static void main(String[] args) { 
     String test = "onetwothree"; 
     Random random = new Random(); 
     for (int i=0;i<test.length();i++){ 
      int randomCharacterPosition = random.nextInt(test.length()); 
      String start = test.substring(0,randomCharacterPosition); 
      String end = test.substring(randomCharacterPosition); 
      test = end.concat(start); 

     } 
     System.out.println(test); 
    } 

, 무작위 문자열의 위치를 ​​선택합니다. 이 위치를 사용하여 입력 문자열을 두 개의 문자열로 나누고이를 바꿔 넣습니다. 이 만드는 이것은, 을 표준 라이브러리를 사용하여 아주 쉽게 구현하지만, 당신이 배열과 목록을 사용할 수 없습니다 것 같다 수 무작위, 문자열 및 (+ 연산자로 대체 될 수 있습니다) CONCAT

1

보다 더

아무것도, 그것이 필요로하는 것보다 더 힘들게 운동하십시오. 단어가

  • 무작위
  • 가에있는 문자를 추가 문자를 선택 비어 있지 않은 상태

    • 빈 문자열
    • 로 출력을 초기화 :

      다음과 같은 알고리즘을 구현할 수 있습니다 출력

    • word에서 선택한 문자를 색인 앞의 부분 + 뒤에있는 부분으로 대체하여 제거합니다. 이 구현 될 수있는 인덱스

합리적으로 효율적으로 사용하여 StringBuilder :

String shuffled(Random random, String word) { 
    StringBuilder result = new StringBuilder(word.length()); 
    StringBuilder rest = new StringBuilder(word); 
    while (rest.length() > 0) { 
     int index = random.nextInt(rest.length()); 
     result.append(rest.charAt(index)); 
     rest.deleteCharAt(index); 
    } 
    return result.toString(); 
} 

당신은 StringBuilder이 는 다음 문자열, 작업 할 수 있습니다 사용할 수 있지만이 덜 효율적이 될 경우 , 이며 일반적으로 Java에서는 권장되지 않습니다. (비효율적 인, 많은 문자열 회씩 연결을 포함하기 때문에.)

String shuffled(Random random, String word) { 
    String result = ""; 
    String rest = word; 
    while (!rest.isEmpty()) { 
     int index = random.nextInt(rest.length()); 
     result += rest.charAt(index); 
     rest = rest.substring(0, index) + rest.substring(index + 1); 
    } 
    return result; 
} 
당신은 이것을 호출 할 수 있습니다

:이 작업은 확실히 배열을 사용으로 가능하지만

String shuffled = shuffled(new Random(), word); 
관련 문제