2016-03-30 20 views
-4

Klavyeden sayı girmenizi (her bir sayı bir boşluk veya virgülle) girmenizi ve sonra bunları alttan yükseğe doğru sıralamanızı isteyen basit bir program yazmak istedim.System.out.print çalışmıyor

Aklımdakiler arasında kullanıcının klavyeyle sayıları girmesini, girdiyi bir String nesnesine ayarlamasını ve ardından bir karakterin bir rakam veya normal bir karakter olup olmadığını belirleyen bir for döngüsünden geçirmesini istemesiydi. caracter bir rakam ise, String dizinin alanına eklenen ve bir sonraki basamağı için bakmak ve bir karakter bir rakam olmayana kadar aynı şeyi olacaktır; Bu durumda, başka bir rakam arar ve aynı işlemi tekrar eder, ancak sonraki String dizisinin alanıyla. Program deliği bulunan String'in uzunluğu boyunca geçtikten sonra, dize dizi her alan bir int dönüştürülebilir, bu yüzden sıralanmasını ve daha sonra basılmış.

Şimdi sorun, sıralı sayıları yazdıramam. Bu rasgele sayıları yazması beni askes ve sıralar, ancak sonuç çıktısını etmez.

import java.util.Scanner; 

public class StartHere { 
public static void main(String[] args) { 

    Scanner scanner = new Scanner(System.in); 
    System.out.print("Type random numbers: "); 
    String input = scanner.nextLine(); 
    String[] numString = new String[input.length()]; 
    int[] numbers = new int[numString.length]; 
    int a = 0; 
    int i = 0; 

    for (i = 0; i < input.length(); i++){ // Each numString field is initialized as " ". 
     numString[i] = ""; 
    } 

    i = 0; 

    while(i < (input.length() - 1)){ 

     if (Character.isDigit(input.charAt(a))) { // If the character at input[a] is a digit 
      numString[i] += Character.toString(input.charAt(a)); // The char is appended to the numString so the hole String field can be 
                   // converted to an integer later. 
      a++; // We go to the next character. 
     } 
     if ((numString[i] != null) && (!Character.isDigit(input.charAt(a)))) { // If the numString[i] field is occupped and the character 
                       // at input[a] is not a digit. 
      i++; // We go to the next field. 
     } 
    } 

    for (int b = 0; b < numString.length;) { // Inside this for loop each field of the numString array 
              // is converted to an integer. 
     if (numString[b] != null) { 
      numbers[b] = Integer.parseInt(numString[b]); 
      b++; 
     } else { 
      b++; 
     } 
    } 

    quickSort(numbers, 0, numbers.length - 1); // Sorts the numbers from smaller to higher. 

    for (int c = 0; c < numbers.length - 1; c++){ // 
     if(c != numbers.length - 1){ 
      System.out.print(numbers[0] + ", "); 
     }else System.out.println(numbers[c] + "."); 
    } 
} 

public static void quickSort(int[] numbers, int left, int right) { // Defines the quickSort method. 
    int pivot = numbers[left]; // We take the first element as pivot. 
    int l = left; // Searches from left to right. 
    int r = right; // Searches from right to left. 
    int aux; 

    while (l < r) { // While searches are not cross. 
     while (numbers[l] <= pivot && l < r) 
      l++; // Searches for an element higher than the pivot. 
     while (numbers[r] > pivot) 
      r--; // Searches for an element smaller than the pivot. 
     if (l < r) { // If this have not been crossed. 
      aux = numbers[l]; // Interchange. 
      numbers[l] = numbers[r]; 
      numbers[r] = aux; 
     } 
    } 
    numbers[left] = numbers[r]; 
    numbers[r] = pivot; 
    if (left < r - 1) { 
     quickSort(numbers, left, right - 1); 
    } 
    if (r + 1 < right) { 
     quickSort(numbers, r + 1, right); 
    } 
} } 

Ne yapabilirdim: Burada

kaynak kodu nedir? Şimdiden teşekkürler!

DÜZENLEME: Şimdi String[] numString her alanını başlatıldı ve bu konsol söylenenler:

if(c != numbers.length - 1){ 
    System.out.print(numbers[0] + ", "); <-- this 
}else System.out.println(numbers[c] + "."); 

You: İlk n-1 kez ilk sayı yazdırıyorsanız

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at StartHere.main(StartHere.java:34) 
+1

System.out.print (sayılar [0] + ",") - emin olmak istediğinizden emin olun [c] –

+2

"Programımın daha önceki bir soruda ne yapması gerektiğini açıkladım, bu yüzden burada bir bağlantı var. ona. " Lütfen her soruyu bağımsız hale getirin - ve bu sorudaki kodu, bu soruyla ilgili * sadece * kod içeren bir [mcve] değerine indirin. –

+0

Jon Skeet: Sorun bu sorunu neden bilmiyorum, ben alakalı kod hangi bölümünün bilmiyoruz olmasıdır. İlk ipucu için teşekkürler, neyse! – SpaceCore186

cevap

2

Bu yöntemle ilgili bir sorun var:

size girişi 6 için null6 gibi bir şey ve verecektir numString[i] += Character.toString(input.charAt(a)); yapıyor String dizi numString başlatıldı, hiçbir zaman, yana
while(i < (input.length() - 1)) { 
    if (Character.isDigit(input.charAt(a))) { 
     numString[i] += Character.toString(input.charAt(a)); 
     a++; // We go to the next character. 
    } 
    if ((numString[i] != null) && (!Character.isDigit(input.charAt(a)))) { 
     i++; // We go to the next field. 
    } 
} 

sadece 6.

Daha sonra, numbers[b] = Integer.parseInt(numString[b]); yaparak Integer'a ayrıştırmaya çalışıyorsunuz. Bu bir istisna atar!

Ayrıca, döngü koşulunu yeniden değerlendirmelisiniz. a'u input.length()'dan while(i < (input.length() - 1))'dan çıkarmanız gerekmez mi?