Leitura de inputs com Scanner

Boa noite pessoal.

Qual a melhor maneira de ler essas entradas?

A entrada contém o número de vértices do grafo e a distância máxima a ser utilizada na busca em largura, seguida de uma série de conexões. Cada conexão é composta do valor inteiro de dois vértices, seguido do peso da conexão (float). Após cada conexão, um inteiro representa se outra conexão será realizada ou não.

ex:

5 0.3 (informa que o grafo possui 5 vértices e que a distância máxima aceita na busca é 0.3)

0 4 0.3 1 (liga os vértices 0 e 4 com uma aresta de peso 0.3)

2 3 0.6 1 (liga os vértices 2 e 3 com uma aresta de peso 0.6)

1 3 0.4 0 (liga os vértices 1 e 3 com uma aresta de peso 0.4 e encerra a leitura)

Estou tentando ler cada linha como string e depois usar um split pra separar cada valor e em seguida ler as entradas do array mas já estou tendo problemas com o Scanner

import java.util.Scanner;

public class Leitor {

public static void main(String[] args) {
	
	Scanner in = new Scanner(System.in);
	StringBuilder sb = new StringBuilder();
	
	
	while(in.hasNext()){
		
		sb.append(in.nextLine());
	}
	
	System.out.println(sb);

}

}

o while hasNext() não sai do loop.

Tente assim:

 while((String linha = in.nextLine()) != null){
       sb.append(linha);
 }

não funcionou.

import java.util.Scanner;

public class Leitor {

public static void main(String[] args) {
	
	Scanner in = new Scanner(System.in);
	StringBuilder sb = new StringBuilder();
	String linha;
	
	while((linha = in.nextLine()) != null){
		
		sb.append(in.nextLine());
	}
	System.out.println(sb);
}

}

O que exatamente não funcionou?
Essa é a forma mais simples de ler uma linha de texto em um laço.

Não sei como está nas versões mais nova de java, mas para imprimir um sb corretamente usa-se o método toString:

System.out.println(sb.toString());

Caso o contrário o que se imprime é o “endereço de memória do objeto”

Tem alguma coisa a ver com o fato de quando você escreve alguma coisa no console e dá enter pra enviar o scanner entende esse enter como uma quebra de linha ou algo assim e não fica com o valor nulo.
Dessa forma que está o código ele nunca sai do laço while.

Faz ai esse teste.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Leitor {

public static void main(String[] args) {
	
	Scanner in = new Scanner(System.in);
	StringBuilder sb = new StringBuilder();
	String linha;
	
	while((linha = in.nextLine()) != null){
		
		sb.append(linha);
		System.out.println(sb);
		
	}
	System.out.println("fim do while");
}

}

O problema não é na impressão. É pra sair do While.

Não, o println implicitamente chama o método toString() para parâmetros não null.

A implementação padrão do método toString() retorna:

<nome comepleto da classe> + "@" <identity hash em hexadecimal>
1 curtida