Así pensando rápido, se me ocurre que puedes crear un array de int con el tamaño n que te diga el usuario.
Ese array, por defecto, está lleno de 0.
Pues le preguntas cuántos 1's quiere el usuario mostrar y a continuación lo que haces es meter en ese array tantos 1's como haya indicado el usuario.
Para que sea más interesante, puedes colocar esos 1 en posiciones al azar dentro del array.
Puedes generar int al azar, ente 0 y n (el tamaño del array)
Con cada int generado, lo usas como puntero de posición para el array y preguntas si en esa posición hay un 0 o un 1.
Si hay un 0, metes un 1 y lo descuentas de la cantidad solicitada por el usuario.
Si no hay un 0, es decir, ya hay un 1 de una inserción anterior, pues no haces nada.
Esto lo haces dentro de un bucle hasta que la cantidad de 1's solicitada por el usuario haya llegado a 0.
Luego muestras en pantalla el contenido del array para mostrar la cadena binaria.
El resultado en pantalla sería algo así:
Indica longitud de la cadena binaria: 10
Indica cuantos 1's ha de tener la cadena: 6
Cadena generada:
1101110100
Aquí te dejo el código que he escrito yo. Lo ideal es que intentes hacerlo tú y si te atascas nos pidas ayuda para completarlo.
Pero si quieres ver el código hecho por mí, es decisión tuya.
import java.util.Scanner;
public class CadenaBin {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.print("Indica longitud de la cadena binaria: ");
int longitud = teclado.nextInt();
System.out.print("Indica cuantos 1's ha de tener la cadena: ");
int nUnos = teclado.nextInt();
int[] cadena = new int[longitud];
//La cadena ahora esta llena de ceros, meteremos 1's al azar
while (nUnos > 0) {
int pos = (int)(Math.random() * longitud);
if (cadena[pos] == 0) {
//Si hay un 0, podemos meter un 1
cadena[pos] = 1;
nUnos--;
}
}
//Ya hemos metidos tantos 1 como pide el usuario, mostramos cadena
System.out.println("\nCadena generada:");
for (int valor : cadena)
System.out.print(valor);
teclado.close();
}
}