2014-12-11 5 views
0

Так что я создавал эту случайную строку генератора:Не удается найти ошибки символ Java

public class Test { 
    public static void main(String[] args) { 
    String strings = "[email protected]#$%&()ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    Random generator = new Random(System.currentTimeMillis()); 
    int stringLength = strings.length()-1; 
    Character character; 
    for (int i = 0; i < stringLength; i++) { 
     Double test = new Double(Math.random()); 
     character = strings.charAt(test.intValue()); 
     String outputString = outputString.concat(character.toString()); 
    } 
    System.out.println(outputString); 
    } 
} 

Я пошел скомпилирован его с помощью JAVAC Test.java, и он дал мне outputString ошибка не может быть отформатирована для линий 14 и 16. Поэтому я добавил ключевое слово String в строку 14, и теперь он говорит мне cannot find symbol: variable outputString

Почему это так?

EDIT:

Хорошо, так что я взял предложения, и это в настоящее время код:

public class Test { 
    public static int randomInt(int min, int max, long seed) { 
    Random rand = new Random(seed); 
    int randomNum = rand.nextInt((max-min)+1) - min; 
    return randomNum; 
    } 

    public static void main(String[] args) { 
    String strings = "[email protected]#$%&()ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    int stringLength = strings.length()-1; 
    Character character; 
    for (int i = 0; i < stringLength; i++) { 
     Double test = new Double(randomInt(0, stringLength, System.currentTimeMillis())); 
     character = strings.charAt(test.intValue()); 
     System.out.print(character); 
    } 
    } 
} 

код работает без ошибок, но ничего не печатает. В настоящее время я использую Командную строку для ее компиляции.

+0

Ваш код длиной всего 14 строк. Как может произойти ошибка в строке 16? – Barmar

+0

У меня была строка импорта до 'public class test' –

+0

Было бы лучше, если бы вы не ссылались на номера строк в своем вопросе.Даже если они верны, вы действительно ожидаете, что мы будем считать строки? – Barmar

ответ

0

мне удалось получить его работая по следующему коду:

import java.util.Random; 

public class Test{ 

    public static void print(String str) { 
     System.out.print(str); 
    } 

    public static int randomInt(int min, int max) { 
     Random rand = new Random(System.currentTimeMillis()); 
     int randomNum = rand.nextInt((max-min)+1) - min; 
     return randomNum; 
    } 

    public static void main(String[] args) throws InterruptedException { 
     String strings = "[email protected]#$%&()ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     int len = strings.length() - 1; 
     StringBuilder outputString = new StringBuilder(len); 
     for (int i = 0; i < len; i++) { 
      Double test = new Double(randomInt(0, len)); 
      Integer value = test.intValue(); 
      if (value <= len) { 
       //print(value.toString()); For testing purposes 
       outputString.append(strings.charAt(value)); 
       Thread.sleep(1); 
      } 
      else {i--;} 
     } 
     print(outputString + "\n"); 
    } 
} 
2

Вы определяете outputString только внутри петли for. Он не будет доступен на улице.

Вы можете выводить символы непосредственно:

for (int i = 0; i < stringLength; i++) { 
    Double test = new Double(Math.random()); 
    character = strings.charAt(test.intValue()); 
    System.out.print(character); 
} 
System.out.println(); 

Если вы настаиваете на конкатенацию строки в цикле, пожалуйста, используйте StringBuilder вместо этого.


Следующая проблема, которую вы столкнетесь:

Double test = new Double(Math.random()); 
strings.charAt(test.intValue()); 

Это всегда будет получить первый символ. Двойной будет между 0 (включительно) и 1 (эксклюзивный).

Необходимо, чтобы create a random integer between 0 and the length of your alphabet.

+0

Когда я определил outputString за пределами цикла, он дал мне две ошибки, которые, возможно, не были инициализированы outputString –

+0

Вы хотите инициализировать ее пустой строкой ('' ''); – Thilo

0

Компилятор правильно сообщает, что outputString не объявлен правильно. outputString объявлен в цикле for, но вы пытаетесь напечатать значение вне.

Быстрый способ исправить это было бы объявить outputString за пределами цикла for, имея outputString = "";

+0

Спасибо, изменил его соответствующим образом. – kuriouscoder

0

outputString определен только в блоке цикла for, поэтому, как только вы его покинете, его больше не существует. Для того, чтобы убедиться, что ваш код работает, определить его вне цикла:

String outputString = ""; 
for (int i = 0; i < stringLength; i++) { 
    Double test = new Double(Math.random()); 
    character = strings.charAt(test.intValue()); 
    outputString += character.toString(); 
} 
System.out.println(outputString); 
0

Это происходит потому, что вы звоните outputString.concat, прежде чем вы intialized это попробовать

String outputString = ""; 
outputString = outputString.concat(character.toString());` 
Смежные вопросы